16

我想要的是

我想将许多 PowerShell 脚本发布为 Nuget 包,以在构建系统上使用。

我想使用PowerShellGet为我做安装工作和版本管理。

我不希望这些脚本成为任何 Visual Studio 解决方案的一部分,而是作为独立脚本。

使用场景

在任何系统上,配置了 Nuget 提供程序的用户执行:

Install-Module MyModule

从那一刻起,该模块的所有导出都对该用户永久可用。用户也可以再次调用该命令来更新这些脚本的版本。

我做了什么

你可以在这里找到包的当前状态:GitHub

  1. 我已将 Nuget 提供程序添加并配置到我们的本地 Nuget 服务器

    做这个电话Get-PackageProvider -Name NuGet -ForceBootstrapSet-PSRepository -Name My_Nuget_Repo -SourceLocation http://my-nuget/api -InstallationPolicy Trusted

  2. 创建了适当的模块,可以通过以下方式在本地导入Import-Module

  3. 使用该模块创建和发布 Nuget 包

问题

我可以通过 cmdlet 安装该软件包,稍后可以在列表Install-Module中看到它。Get-InstalledModule

但是,没有可用的功能。

另外,无论如何,但Install-Module不要从我的包中调用任何脚本:

  • 不是ScriptsToProcessMyModule.psd1
  • Install.ps1不从tools文件夹调用
  • Init.ps1不从tools文件夹调用
  • 模块导出的 Cmdlet 不可用且模块无法导入Import-Module

(从 Visual Studios 安装时,相同的包可以正常工作Install-Package MyModule,调用脚本,导入 PowerShell 模块)。

调查

由于PowerShellGet基于OneGet它,问题似乎出在Install-Packagecmdlet 中(在 cmdlet 内部调用Install-Module)。

当我Install-Package MyModule从 Visual Studio执行Install.ps1并被Init.ps1调用时。但是来自纯 PowerShell 的相同命令什么也没做。

4

1 回答 1

31

经过长时间的逆向工程,我找到了根本原因

技术原因

PSModule必须<Tags>在 nuspec 文件中添加魔法标签。

真正的原因

您根本不应该手动创建 nuspec 文件和打包 nuget 包。请改用Publish-Modulecmdlet。

如何正确地做

我已经更新了powershellget-module GitHub

  • 可发布的最小模块示例
  • 一种如何将本地文件夹用作 Nuget 提要的方法
  • 该模块的发布、安装和使用
  • 没有依赖的参考脚本,它在本地完成,所以你可以研究它

一探究竟。

于 2015-11-03T02:25:04.893 回答