У меня есть некоторый библиотечный код, который используется из моего приложения, а также используется настраиваемым действием .NET в проекте установщика Visual Studio. Код библиотеки, в свою очередь, использует блок ведения журнала Enterprise Library для ведения журнала. Как я могу получить информацию о конфигурации в Enterprise Library в контексте моего настраиваемого действия, выполняемого внутри msiexec? Можно ли загрузить механизм конфигурации в код перед тем, как я сделаю какие-либо вызовы 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] вместе со сборкой пользовательского действия), а динамически загруженные сборки, вызванные в файле конфигурации, - нет. Обойти это невозможно.