如何从 NuGet 包安装 PowerShell 二进制 cmdlet (C#) 及其依赖项

Howto install a PowerShell binary cmdlet (C#) from a NuGet package with its dependencies

我使用 C# 开发了一个二进制 cmdlet。该项目的 TargetFramework 是 netstandard2.0 并且程序集(dll)作为 NuGet 包发布。该程序集以及 NuGet 包具有一些依赖项(即其他 NuGet)。

在使用 PowerShell 的计算机上本地安装我的二进制 cmdlet 的最佳方法是什么,这样我的 cmdlet 就可以在该计算机上使用,以便从 PowerShell 脚本调用。即,我能否使用 Powershell 命令安装 NuGet,以便 PowerShell 可以使用我的 DLL 及其依赖项?

从 PowerShell 7.2 开始,支持直接安装 NuGet 包。

您的选择是:

  • 如果可行,重新打包您的二进制 cmdlet 及其依赖项作为 PowerShell module, which can then be installed via Import-Module:

    • PowerShell 模块通常是一个以模块命名的 目录,其中包含一个 module manifest 文件 (*.psd1),其中包含关于模块的元数据以及构成模块实现的文件;在模块包装 cmdlet DLL 的情况下,清单的 RootModule 条目引用该 DLL,而 RequiredAssemblies 条目引用依赖项。
    • Publish-Module is called to publish a module, it is packaged as a NuGet package with a custom structure that Import-Module understands; typically, PowerShell modules are published to the PowerShell Gallery.
    • 也许这是一个可行的起点:Creating a new module
  • 否则,使用辅助。 .NET SDK 项目来安装您的 NuGet 包,这是 this answer.

    中概述的一个重要过程
    • This MIT-licensed Gist contains helper function Add-NuGetType, which automates the process and additionally supports native library dependencies in PowerShell (Core) 7+, as discussed in ;但是,请注意后者不提供严格的版本控制,因此不应在生产中使用。