为 PowerShellGet 创建纯 powershell Nuget 模块

Create pure powershell Nuget module for PowerShellGet

我想要的

我想将一些 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 包

问题

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

但是,没有可用的功能。

此外,无论如何,Install-Module 没有从我的包中调用任何脚本:

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

调查

由于 PowerShellGet 是基于 OneGet 看来问题出在 Install-Package cmdlet(在 Install-Module cmdlet 中调用)。

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

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

技术原因

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

真实原因

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

如何正确操作

我已将 powershellget-module GitHub 更新为:

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

检查一下。