为PowerShellGet创建纯PowerShellNuget模块

pcww981p  于 2022-12-26  发布在  Shell
关注(0)|答案(1)|浏览(100)

我想要的

我想将一些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
1.创建了合适的模块,可以通过Import-Module导入到本地
1.使用该模块创建并发布了Nuget包

问题

我可以通过Install-Module cmdlet安装该软件包,稍后可以在Get-InstalledModule列表中看到它。
但是,没有可用的功能。
此外,无论如何,但Install-Module不调用任何脚本从我的包:

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

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

调查

由于PowerShellGet基于OneGet,因此问题似乎出在Install-Package cmdlet(在Install-Module cmdlet内部调用)中。
当我在Visual Studio中执行Install-Package MyModule时,调用了Install.ps1Init.ps1。但纯PowerShell中的相同命令什么也不做。

8nuwlpux

8nuwlpux1#

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

技术原因

必须将魔法标记PSModule添加到nuspec文件中的<Tags>
真正的原因

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

如何正确操作

我更新了powershellget-module GitHub

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

你看

相关问题