У меня есть Powershell script, который загружает сборку .NET(.EXE в моем случае) и вызывает открытый метод, который использует app.config для вытягивания зашифрованной строки соединения.
script динамически копирует сборку exe.config в папку Powershell ($ pshome) в виде powershell.exe.config и может работать из моей коробки разработки просто отлично. Проблема в том, что он не запускается со стандартной установки Windows Server 2003.
Я проверил, что exe.config правильно копируется в каталог powershell. Я запустил SysInternals Process Explorer и проверил, что процесс имеет доступ к файлам конфигурации (без файлов, не найденных сообщений). Я удаленно отлаживал экземпляр powershell.exe и вижу, что сборка отлично загружается, но не может получить доступ к параметрам ConfigurationManager.AppSettings [...] (возвращает null).
У меня нет идей. Я читал, что я могу использовать отдельный домен приложения, но я не вижу примеров этого с Powershell.
Мой код делает что-то вроде:
$absolute_path = "c:\foo.exe"
$config_path = $absolute_path + ".config"
copy "$config_path" "$pshome\powershell.exe.config" -Force
[Reflection.Assembly]::LoadFrom($absolute_path)
$foo = new-object MyFooAssembly.FooClass
$foo.DoSomething()
В Vista код работает, в Windows Server 2003 код не работает.