问题描述
解决方案
归功于mklement0
以下是我将我的 bin\MyModule.0.1.0.nupkg
模块发布到 PSGallery 的结果:
- 将
bin\MyModule.0.1.0.nupkg
重命名为bin\MyModule.0.1.0.zip
- 将
bin\MyModule.0.1.0.zip
提取到bin\MyModule\
(提取的文件夹的名称必须与其中的.psd1
文件的名称匹配,因此在我的情况下,现在有一个bin\MyModule\MyModule.psd1
文件)。 - 从提取的文件夹中删除
[Content_Types].xml
文件(当您尝试从 PSGallery 下载和安装模块时,不删除会导致错误,这似乎是由于该文件的 2 个副本存在于生成的 {{ 1}}).
然后我就可以运行这个命令了:
.nupkg
它奏效了!我的模块现已发布到 PSGallery。
原帖
我有一个 Powershell 模块由 Autorest.Powershell 生成并打包为 .nupkg 文件。我现在想将我的模块发布到 Powershell Gallery,但不知道如何让它工作。 我试过了:
PS> Publish-Module -NuGetApiKey xxx -Path .\bin\MyModule
应该可以将 .nupkg 文件发布到 Powershell 库,因为您可以从 Powershell 库下载包作为 .nupkg 文件。此外,Autorest 文档说 this 关于其生成的 nupkg 文件:
.nupkg 的结构已创建,因此它可以加载到 PSRepository 的一部分。此外,这个包的格式可以分发到 PSGallery。
我猜这是可能的,但我就是不知道该怎么做。任何帮助将不胜感激
解决方法
从 PowerShellGet
模块的 2.2.5 版开始 - PowerShell 7.2 预览版附带的模块 - 用于将 PowerShell 模块发布到 Publish-Module
的 PowerShell Gallery cmdlet 执行 不支持上传.nupkg
个文件。
相反,它需要一个(未压缩的)目录,其中包含要发布的 PowerShell 模块[1],然后压缩到幕后的(临时)NuGet 包(.nupkg
存档)并上传到图库。
我不熟悉 AutoRest.PowerShell,但如果它声称它创建的 .nupkg
档案与 PowerShell 库兼容,您可以尝试提取(解压缩)这样的存档(NuGet 文件是 ZIP 存档,因此您可以将它们传递给 Expand-Archive
)到一个目录中,并尝试将该目录的路径传递给 Publish-Module
的 -Path
参数(选择包含模块清单文件 (.psd1
),它可能是一个子文件夹。
[1] 如果要发布的模块位于 $env:PSModulePath
中列出的目录之一,则可以从模块的名称推断其目录位置,并传递给-Name
参数。