アプリケーションから使用され、Visual Studio インストーラー プロジェクトの .NET カスタム アクションでも使用されるライブラリ コードがいくつかあります。ライブラリ コードは、Enterprise Library ログ ブロックを使用してログを記録します。msiexec 内で実行されているカスタム アクションのコンテキストで Enterprise Library の構成情報を取得するにはどうすればよいですか? EntLib を呼び出す前に、コードで構成メカニズムをブートストラップすることは可能ですか?
更新: 動作するように見えるハックを作成しましたが、リフレクションを使用して非公開の静的フィールドを設定することに依存しています。EntLib が .NET ConfigurationManager と非常に緊密に結合されているのは残念です。
var factory = new LogWriterFactory( new FakeConfigSource( "foo.config" ) );
var field = typeof ( Logger ).GetField( "factory", BindingFlags.Static | BindingFlags.NonPublic );
field.SetValue( null, factory );
Logger.Write( "Test" );
更新 2: このハックはテストベッドで機能しますが、msiexec のコンテキストで実行すると、アセンブリ ローダーは構成ファイルで参照されているアセンブリを検出しません。Fuslogvw は、AppBase が Windows の system32 ディレクトリであることを示しています。私が理解していないのは、カスタム アクション アセンブリのマニフェストの依存関係 (カスタム アクション アセンブリと一緒に [TargetDir] ディレクトリにある) が見つかるのに、構成ファイルで呼び出される動的に読み込まれるアセンブリが見つからない理由です。これを回避する方法はありません。