如何从具有PowerShell 3.0版的计算机上强制加载System.Management.Automation.dll v1.0?

时间:2012-12-19 13:06:25

标签: .net powershell appdomain .net-assembly assembly-resolution

我正在尝试让[poshrunner.exe]能够在安装了PowerShell 3.0版的计算机上的PowerShell 2.0版环境中运行脚本。 PowerShell.exe支持此功能,although it seems that distinct support for PowerShell 1.0 is dubious

我正在运行Windows 8.我的GAC中有两个版本的System.Management.Automation.dll:

  • System.Management.Automation,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35(由powershell.exe -version 3.0加载)
  • System.Management.Automation,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35(由powershell.exe -version 1.0powershell.exe -version 2.0加载)

据我所知,我对System.Management.Automation.dll没有publisher policy assembly

C:\Windows\assembly\GAC_MSIL>dir C:\Windows\assembly\GAC_MSIL\policy*
 Volume in drive C has no label.
 Volume Serial Number is 0207-A8AA

 Directory of C:\Windows\assembly\GAC_MSIL

11/16/2012  11:49 PM    <DIR>          Policy.12.0.Microsoft.Office.Interop.Access.Dao
12/13/2012  11:49 PM    <DIR>          policy.2.1.Microsoft.Web.PlatformInstaller
12/13/2012  11:49 PM    <DIR>          policy.3.0.Microsoft.Web.PlatformInstaller
10/29/2012  03:33 PM    <DIR>          policy.3.5.System.Data.SqlServerCe
10/29/2012  03:33 PM    <DIR>          policy.3.5.System.Data.SqlServerCe.Entity
               0 File(s)              0 bytes
               5 Dir(s)  51,204,710,400 bytes free

C:\Windows\assembly\GAC_MSIL>

但是,执行AppDomain.CurrentDomain.Load("System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35");正在加载程序集的版本3。 Assembly.Load()具有相同的结果。

在致电程序集之前:

[Before Step Through]

致电大会后:

[After Step Through]

该代码恰好在辅助应用程序域中运行,因此我愿意并且能够使用AppDomain设置。如何在运行时有条件地强制System.Management.Automation,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35。

2 个答案:

答案 0 :(得分:1)

随着时间的推移,我遇到了System.Management.Automation的各种问题。我最近再次点击它并决定找到一种使用批处理文件从.NET运行PowerShell的替代方法。有关代码示例,请参阅此博客文章: http://www.nootn.com.au/2013/01/run-powershell-from-net-program-without.html

这也提到了如何强制它运行特定版本的PowerShell,所以如果这个解决方案适合你,它可能是你的问题的答案(假设你很乐意尝试避免System.Management.Automation)。

我希望这有助于解决您的问题或解决它!

答案 1 :(得分:0)

如果您转到项目中的引用,请找到引用并告诉它复制到本地也应该有帮助。