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

Inconsistent assembly loading behavior in powershell

我正在调试PowerShell脚本开始出现故障的原因,看起来它使用的哈希集没有引用System.Core程序集,因此修复程序将以如下方式结束:

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

我不知道它以前是如何工作的,在一些机器上仍然可以正常运行,没有添加类型行。我这里缺什么?


为了继续大卫的想法,并且因为注释中的代码很可怕,您应该检查程序集是否已加载。这里有一个关于检查程序集的小博客

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

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

Jeroen Mostert的评论

If you want to be really precise about it, you should verify you've
got .NET's very own System.Core, not any old impostor, and then
there is no need to check that's already happened. Add-Type
-AssemblyName"System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"