将 PowerShell 参考程序集与 .NET 框架版本相匹配

问题描述 投票:0回答:1

直到今天,蓝色药丸让我很高兴地忽略了一个有趣的点。但 James Truher(微软 PowerShell 团队)最近发布的一篇文章将其换成了红色药丸。这导致了这个思路......

上周之前,用 C# 编写 cmdlet 需要从任何可以找到的地方挖掘

System.Management.Automation.dll

 的副本(或者,如果对 PowerShell v3 特别满意,则从 
C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0
 中 VS2013 安装的 V3 参考程序集中挖掘。无论哪种方式,它远不如 nuget 提供的那样健壮地维护与该 DLL 的连接。

但是现在,正如 Truher 所宣布的那样,PowerShell 参考程序集

可以通过 nuget 获得

万岁!除了 Microsoft 不仅为 V3 提供了参考程序集,还为 PowerShell V3、V4 和 V5 提供了参考程序集。 我想知道的是:对于应一起使用哪个版本的 PowerShell 引用程序集与哪个版本的 .NET 框架是否存在限制?还是简单地说,如果我想要运行自定义 C# cmdlet 的系统安装了 PowerShell 版本 x

,那么我只需在开发中使用参考程序集版本

x 还有一点我需要在更广泛的背景下澄清:目前我有一个从 GAC 引用 System.Management.Automation.dll

的解决方案,并且

CopyLocal

 设置为 false,因此它会在运行时使用 GAC 中的 DLL。与从 nuget 下载参考程序集的私有副本并将其保存在我的解决方案中相比,这不是更好吗?
	

不幸的是,关于用 C# 编写 cmdlet 的信息并不是特别丰富。简短的回答是:您可以使用参考程序集,而不必担心 .NET 版本。
c# .net powershell nuget powershell-cmdlet
1个回答
0
投票
答案需要更多解释......

事实证明,直接引用
    any
  1. System.Management.Automation.dll 将会产生负面后果。我第一次这样做是因为我不明白正确的 NuGet 包在哪里,结果是它在任何其他机器上都崩溃了。

    您可以直接使用参考程序集,因为参考程序集与.NET版本绑定!因此,无论您想要支持哪个版本的 PowerShell,您都将依赖于它所针对的任何 .NET 版本。不幸的是,使用参考程序集也会限制您只能使用该 PowerShell 版本。示例:
  2. PowerShell 5 参考组件
  3. 最兼容的选项是使用
  4. PowerShellStandard.Library
  5. 。使用 .NET Standard 2.0+,您可以支持任何版本的 PowerShell

    并且它允许您在不涉及 PowerShell 运行时的情况下使用您的库!也就是说,您可以使用 C# cmdlet,就像它们只是常规 C# 库一样。这是最推荐的选项,但单元测试仍然需要特定版本的 .NET 来执行。 PSCmdlets 的任何单元测试仍然需要实际的参考程序集来执行。

    
        

© www.soinside.com 2019 - 2024. All rights reserved.