我试图让 [poshrunner.exe] 能够在安装了 PowerShell 3.0 版的机器上的 PowerShell 2.0 版环境中运行脚本。PowerShell.exe 支持这一点,尽管对 PowerShell 1.0 的独特支持似乎是可疑的。
我正在运行 Windows 8。我的 GAC 中有两个版本的 System.Management.Automation.dll:
- System.Management.Automation,版本=3.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35(由 加载
powershell.exe -version 3.0
) - System.Management.Automation,Version=1.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35(由
powershell.exe -version 1.0
and加载powershell.exe -version 2.0
)
据我所知,我没有System.Management.Automation.dll 的发布者策略程序集
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()具有相同的结果。
在调用程序集之前:
[ ]
调用程序集后:
[ ]
该代码恰好在辅助应用程序域中运行,因此我愿意并且能够对 AppDomain 设置进行很多操作。如何强制 System.Management.Automation, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 在运行时有条件地加载。