如何从 NuGet 包及其依赖项安装 PowerShell 二进制 cmdlet (C#)
Posted
技术标签:
【中文标题】如何从 NuGet 包及其依赖项安装 PowerShell 二进制 cmdlet (C#)【英文标题】:Howto install a PowerShell binary cmdlet (C#) from a NuGet package with its dependencies 【发布时间】:2021-12-27 14:33:21 【问题描述】:我使用 C# 开发了一个二进制 cmdlet。项目的 TargetFramework 是 netstandard2.0,程序集(dll)作为 NuGet 包发布。这个程序集和 NuGet 包有一些依赖项(即其他 NuGet)。
使用 PowerShell 在计算机上本地安装我的二进制 cmdlet 的最佳方法是什么,以便我的 cmdlet 在该计算机上可用,以便从 PowerShell 脚本调用。即,我能否使用 Powershell 命令安装 NuGet,以便我的 DLL 及其依赖项可用于 PowerShell?
【问题讨论】:
【参考方案1】:从 PowerShell 7.2 开始,不支持直接安装 NuGet 包。
GitHub issue #6724 请求此类支持。您的选择是:
如果可行,重新打包您的二进制 cmdlet 及其依赖项作为 PowerShell module,然后可以通过 Import-Module
安装:
*.psd1
),其中包含有关模块的元数据以及构成模块实现的文件;对于包装 cmdlet DLL 的模块,清单的 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 中所述;但是,请注意后者不提供严格的版本控制,因此不应在生产中使用。
【讨论】:
@KarloX,请查看我的更新。以上是关于如何从 NuGet 包及其依赖项安装 PowerShell 二进制 cmdlet (C#)的主要内容,如果未能解决你的问题,请参考以下文章
VS 中NuGet 尝试还原程序包时出错"*"已拥有为"**"定义的依赖项
NuGet:将包依赖项显式列出为项目中的包引用,以便可以卸载它们