【问题标题】: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。
  • 成功了!再次感谢!!!

标签: c# .net windows powershell


【解决方案1】:

两种解决方案:

更新 PowerShell

PowerShell 从版本 5 开始支持::new() 语法(感谢@madreflection!)

更改语法

在版本 5 之前的 PowerShell 中执行此操作的方法是:

$var = [Activator]::CreateInstance([System.Collections.Generic.Dictionary`2[System.String,System.String]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多