为PowerShellGet创建纯PowerShell Nuget模块

Ant*_*rin 10 powershell nuget oneget powershellget

我想要的是

我想将许多PowerShell脚本发布为构建系统上使用的Nuget包.

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

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

使用场景

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

Install-Module MyModule
Run Code Online (Sandbox Code Playgroud)

从那时起,该模块的所有导出将永久可供该用户使用.用户也可以再次调用该命令来更新这些脚本的版本.

我做了什么

你可以在这里找到当前的包状态: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-Modulecmdlet 安装该软件包,稍后我会在Get-InstalledModule列表中看到它.

但是,没有可用的功能.

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

  • 不调用ScriptsToProcessMyModule.psd1
  • 没有Install.ps1tools文件夹调用
  • 没有Init.ps1tools文件夹调用
  • 模块导出的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的相同命令什么都不做.

Ant*_*rin 21

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

技术原因

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

真正的原因

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

如何正确地做到这一点

我已经更新了powershellget-module GitHub:

  • 可以发布的最小模块示例
  • 一种如何使用本地文件夹作为Nuget feed的方法
  • 该模块的发布,安装和使用
  • 没有依赖关系的引用脚本在本地完成所有操作,因此您可以研究它

看看这个.