7

是否可以运行由 3.5 运行时而不是 2.0 支持的 PowerShell 1.0(或 2.0 CTP)?

我们正在构建一个 .NET 3.5 解决方案,我仍然想使用 PowerShell 作为我们的脚本引擎来执行计划任务等。

我不需要 LINQ 语法或任何东西,只需要 3.5 库和运行时。

跟进:感谢您关于动态加载程序集的回复。但是让我澄清一下我的问题:有什么方法可以运行 PowerShell 以便默认运行 3.5 库?因此,New-Object System.Xml.XmlDocument例如,如果我输入,我实际上默认获得的是 3.5 版本?

半相关的问题:如果我必须动态加载,比如说,System.Xml3.5 的库,它会覆盖现有的符号定义,以便下次我键入New-Object System.Xml.XmlDocument时,它加载 3.5 版本?

4

4 回答 4

8

如果您的系统上安装了 3.5,那么这就是您在运行 PowerShell 时将得到的。

PowerShell 只是“需要”2.0,但 3.0 和 3.5 是兼容的,并且在安装时会自动转发。在 PowerShell V2 中,我们实际上会查看您拥有的版本并“点亮”某些功能(例如 PowerShell_ISE 和 Out-GridView 在您拥有 3.51 时可用)。

实验!享受!从事!

Jeffrey Snover [MSFT] Windows 管理合作伙伴架构师

于 2009-02-22T15:53:59.903 回答
4

只要您获得正确的完全限定名称,我不明白为什么这不起作用:

[System.Reflection.Assembly]::Load("System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")

我只使用了 Linq,因为这是第一个想到的。此时,ddl 已加载,您可以从中创建/使用对象。

于 2009-02-06T18:55:33.450 回答
3

PowerShell 是针对 2.0 构建的,因此您别无选择,只能至少拥有 2.0。但正如 James 所说,您可以通过加载适当的程序集来加载 3.0 和 3.5 功能。LINQ 是 3.5 的一个很好的例子,但您也可以从 PowerShell 执行 WPF (3.0)。但请注意 WPF 的 STA 和 MTA,因为只有 PowerShell v2 完全支持 WPF(完全支持线程关联)。

于 2009-02-06T19:26:13.983 回答
3

3.5 实际上是 2.0 的附加组件。也就是说,3.5中没有被取代的类;它不是替代品。CLR(公共语言运行时)仍然是 v2.0。

于 2009-02-09T03:14:35.613 回答