PowerShell中的程序集加载行为不一致

时间:2014-12-02 23:13:57

标签: powershell powershell-v2.0

我正在调试为什么PowerShell脚本开始失败,看起来它在没有引用System.Core程序集的情况下使用Hashset,所以修复最终会得到这样的结果:

Add-Type -AssemblyName System.Core
$hash = new-object 'System.Collections.Generic.HashSet[string]'

我能弄清楚它之前是如何工作的,并且在某些机器上运行得很好,没有添加类型线。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

要继续David的想法,并且因为评论中的代码很可怕,您应该检查程序集是否已加载。关于检查程序集的小博客是here

If (!(([appdomain]::currentdomain.GetAssemblies()).FullName -match "System\.Core")){
    Add-Type -AssemblyName System.Core
}
$hash = new-object 'System.Collections.Generic.HashSet[string]'

我默认加载了这个程序集。好奇受影响的系统有什么。受影响的计算机上的Dot.Net框架版本是什么?我的一些3.5代码在Windows更新后停止工作,需要重新安装框架。

来自 Jeroen Mostert的评论

  

如果你想真的准确,你应该验证你   得到了.NET自己的System.Core,而不是任何旧的冒名顶替者   没有必要检查已经发生的事情。 Add-Type -AssemblyName "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"