Linux上的PowerShell - 如何加载\ use .Net程序集?

时间:2016-08-20 18:50:20

标签: .net linux powershell ubuntu mono

既然PowerShell是open sourced并且在Linux上可用,那么任何人都知道如何在linux下添加.Net程序集?如果可能的话?

我已经在here上在Ubuntu 16.04上安装了PS,并在here中安装了Mono。

在终端上运行PS之后,这条线出乎意料地工作得很好:

add-type -assembly "/usr/lib/mono/4.5-api/System.Web.Extensions.dll"

没有错误等......

然而,当我尝试:

$js = New-Object "System.Web.Script.Serialization.JavaScriptSerializer"

我收到此错误:

new-object : Cannot find type [System.Web.Script.Serialization.JavaScriptSerializer]: verify that the 
assembly containing this type is loaded.
At line:1 char:10
+ $ps_js = new-object "System.Web.Script.Serialization.JavaScriptSerial ...
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (:) [New-Object], PSArgumentException
    + FullyQualifiedErrorId : TypeNotFound,Microsoft.PowerShell.Commands.NewObjectCommand

有关该提示的任何提示吗? 这可能是一个bug,因为linux上的powershell仍然是“alpha”吗?

BTW - 在Windows上一切正常......

1 个答案:

答案 0 :(得分:4)

Linux上的PowerShell基于CoreCLR,而mono是CLR /完整框架的克隆。您正在使用的程序集是完整的框架,并且无法在CoreCLR中加载,因为它基于mscorlib而不是System.Runtime。

在一年内,即将推出的.NET Standard 2.0将会有一种解决方法(可能)。

如果不使用newtonsoft.json,Json序列化应该是PowerShell中的原生序列。