【发布时间】:2010-10-24 13:35:04
【问题描述】:
我有一个 Powershell 脚本,它正在加载一个 .NET 程序集(在我的例子中是 .EXE)并调用一个使用 app.config 拉取加密连接字符串的公共方法。
脚本将程序集的 exe.config 作为 powershell.exe.config 动态复制到 Powershell ($pshome) 文件夹,并且能够从我的开发箱中运行。问题是它不能从标准的 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 中代码无效。
【问题讨论】:
标签: .net powershell app-config