COM 相互運用機能を介してアセンブリを使用しているときに、.NET で構成設定を読み込む際に問題が発生しました。
背景: 一部のサーバーでは、さまざまなタスクを実行する多くの VBScript スクリプトを使用しています。通常、電子メールの送信などの機能を実行します。これを容易にするために、VBScript から作成可能な COM オブジェクトを作成したいと考えました。これは、これらの一般的な機能セットのいくつかに役立ちます。
したがって、相互運用機能を介していくつかの COM インターフェイスを公開する .NET アセンブリを作成しようとしています。私はなんとかこれを機能させましたが、構成設定の一部を (ハードコードではなく) 外部化したいと考えました。
この行を使用して構成を取得しています。
ConfigurationManager.OpenExeConfiguration(this.GetType().Assembly.Location)
これは、テスト プロジェクトからテストし、.NET プロジェクトとして参照している場合は問題なく動作するように見えますが、COM オブジェクトとしてテストすると失敗します。
失敗の理由は、構成ファイルにカスタム セクションがあるためです。
<section name="CustomSection" type="COMObjects.CustomSection, COMObject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e9e8071519bd2f04"/>
ただし、カスタム セクションを読み込もうとすると、アセンブリ "COMObject" の読み込みに失敗します。私には、アセンブリを GAC に配置していない (また、配置したくない) ため、これは理にかなっています。
このようなシナリオで、構成ファイルで参照されているアセンブリを .NET フレームワークが見つけやすくする方法はありますか?
以下は、バインディングの fuslogvw.exe 出力です。
操作に失敗しました。 バインド結果: hr = 0x80070002。システムは、指定されたファイルを見つけることができません。 アセンブリ マネージャーの読み込み元: C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll 実行可能ファイル C:\Windows\SysWOW64\cscript.exe の下で実行 --- 詳細なエラー ログが続きます。 === プレバインド状態情報 === ログ: ユーザー = My-MACHINE\ME ログ: DisplayName = COMObject、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = e9e8071519bd2f03 (完全指定) ログ: Appbase = file:///C:/Windows/SysWOW64/ ログ: 初期 PrivatePath = NULL ログ: 動的ベース = NULL ログ: キャッシュ ベース = NULL ログ: AppName = NULL アセンブリの呼び出し: System.Configuration、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a。 ログ: このバインドはデフォルトのロード コンテキストで開始されます。 ログ: アプリケーション構成ファイルが見つかりません。 ログ: C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config のマシン構成ファイルを使用しています。 ログ: 以前にも同じバインドが見られ、hr = 0x80070002 で失敗しました。 ERR: 事前ダウンロードチェック中に回復不可能なエラーが発生しました (hr = 0x80070002)。
ありがとう