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

标签 c# powershell powershell-cmdlet

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

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

最佳答案

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

您的选择是:

  • 如果可行,重新打包您的二进制 cmdlet 及其依赖项作为 PowerShell module , 然后可以通过 Import-Module 安装:

    • PowerShell 模块通常是一个以模块命名的目录,其中包含一个module manifest。文件 (*.psd1),其中包含关于模块的元数据以及构成模块实现的文件;在模块包装 cmdlet DLL 的情况下, list 的 RootModule 条目引用该 DLL,而 RequiredAssemblies 条目引用依赖项。
    • 何时 Publish-Module被调用以发布模块,它被打包为 具有自定义结构 的 NuGet 包,Import-Module 可以理解;通常,PowerShell 模块发布到 PowerShell Gallery .
    • 也许这是一个可行的起点:Creating a new module
  • 否则,使用辅助。 .NET SDK 项目来安装您的 NuGet 包,这是 this answer 中概述的一个重要过程.

    • This MIT-licensed Gist包含辅助函数 Add-NuGetType,它可自动执行该过程并另外支持 PowerShell (Core) 7+ 中的 native 库依赖项,如 this answer 中所述。 ;但是请注意,后者不提供严格的版本控制,因此不应在生产中使用。

关于c# - 如何从 NuGet 包安装 PowerShell 二进制 cmdlet (C#) 及其依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69990430/

相关文章:

c# - 数据格式问题。将 GridView 导出到 Excel

c# - 即时更改实体连接

c# - 不同命名空间中的部分类

PowerShell 模块 - 每个 cmdlet 都有单独的文件

c# - Commandlet 与控制台应用程序

c# - 使用 Thread.Interrupt 取消线程池工作项

azure - 在Powershell中获取azure资源的标签值

windows - 如何在 PowerShell 脚本中向用户提供可供选择的打印机列表?

c# - 为什么 Powershell 没有看到它已经加载了这个程序集?

c# - 如何在运行时从模块代码内部获取 PowerShell 模块版本