为PowerShellGet创建纯PowerShell Nuget模块

时间:2015-10-30 10:29:10

标签: powershell nuget oneget 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. 在本地导入
  4. 使用该模块创建并发布了Nuget包
  5. 问题

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

    但是,没有可用的功能。

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

    • 未从ScriptsToProcess
    • 致电MyModule.psd1
    • 未从Install.ps1文件夹
    • 调用tools
    • 未从Init.ps1文件夹
    • 调用tools
    • 模块导出的Cmdlet不可用,并且Import-Module
    • 无法导入模块

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

    研究

    由于PowerShellGet基于OneGet,因此问题似乎位于Install-Package cmdlet(在Install-Module cmdlet中调用)。

    当我从Visual Studio Install-Package MyModule执行Install.ps1并调用Init.ps1时。但纯PowerShell的相同命令什么都不做。

1 个答案:

答案 0 :(得分:19)

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

技术原因

必须将神奇标记PSModule添加到nuspec文件中的<Tags>

真正的原因

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

如何正确地做到

我已将powershellget-module GitHub更新为:

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

检查出来。