无法创建通用字典...有时
Posted
技术标签:
【中文标题】无法创建通用字典...有时【英文标题】:Unable to Create Generic Dictionary... Sometimes 【发布时间】:2020-04-04 00:08:57 【问题描述】:我正在尝试在 PowerShell 中使用 C# 库,其中一个库方法需要 [System.Collections.Generic.Dictionary`2[System.String,System.String]]
类型的参数。
这应该很简单
$var = [System.Collections.Generic.Dictionary`2[System.String,System.String]]::new()
在我的 Win7 开发盒上...但是当我部署到我的 Win2012R2 服务器时,会引发以下错误:
Method invocation failed because [System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]] does not contain a method named 'new'.
老实说,我不确定这是否是 PowerShell、C#、.NET、Windows 内核或它们的某种组合的问题。我怀疑它甚至可能是隐藏一些其他错误的误报(仅在这个项目中不会是第一个这样的案例)。
【问题讨论】:
::new()
是一个较新的设施。旧版本不支持它(不确定是哪个版本在我脑海中引入了它)。您应该能够将服务器上的版本升级到支持它的版本,因为它与您的开发盒是同一代 Windows。
谢谢,@madreflection!当您说“版本”时,您是指 .NET 框架的版本还是其他版本?
好像是introduced in PowerShell 5。在 Win2012R2 服务器上安装 PowerShell 5。
成功了!再次感谢!!!
【参考方案1】:
两种解决方案:
更新 PowerShell
PowerShell 从版本 5 开始支持::new()
语法(感谢@madreflection!)
更改语法
在版本 5 之前的 PowerShell 中执行此操作的方法是:
$var = [Activator]::CreateInstance([System.Collections.Generic.Dictionary`2[System.String,System.String]])
【讨论】:
以上是关于无法创建通用字典...有时的主要内容,如果未能解决你的问题,请参考以下文章