为 PowerShellGet 创建纯 powershell Nuget 模块
Create pure powershell Nuget module for PowerShellGet
我想要的
我想将一些 PowerShell 脚本发布为 Nuget 包以用于构建系统。
我想用PowerShellGet为我做安装工作和版本管理。
我不希望这些脚本成为任何 Visual Studio 解决方案的一部分,而是作为独立的脚本。
使用场景
在任何系统上,配置了 Nuget 提供程序的用户执行:
Install-Module MyModule
从那一刻起,该模块的所有导出对该用户永久可用。
用户也可以再次调用该命令以更新那些脚本的版本。
我做了什么
您可以在此处找到包的当前状态:GitHub
我已将 Nuget 提供程序添加并配置到我们的本地 Nuget 服务器
要执行此操作,请调用 Get-PackageProvider -Name NuGet -ForceBootstrap
和 Set-PSRepository -Name My_Nuget_Repo -SourceLocation http://my-nuget/api -InstallationPolicy Trusted
创建了合适的模块,可以通过Import-Module
在本地导入
使用该模块创建并发布了 Nuget 包
问题
我可以通过 Install-Module
cmdlet 安装那个包,稍后我可以在 Get-InstalledModule
列表中看到它。
但是,没有可用的功能。
此外,无论如何,Install-Module
没有从我的包中调用任何脚本:
- 没有从
MyModule.psd1
调用 ScriptsToProcess
- 未从
tools
文件夹调用 Install.ps1
- 未从
tools
文件夹调用 Init.ps1
- 模块导出的 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 的相同命令什么也不做。
经过长时间的逆向工程,我找到了根本原因
技术原因
魔法标签 PSModule
必须添加到 nuspec 文件中的 <Tags>
。
真实原因
您根本不应该手动创建 nuspec 文件和打包 nuget 包。请改用 Publish-Module
cmdlet。
如何正确操作
我已将 powershellget-module GitHub 更新为:
- 可发布的最小模块示例
- 如何将本地文件夹用作 Nuget 提要的方法
- 该模块的发布、安装和使用
- 没有依赖的参考脚本,全部在本地完成,所以你可以研究它
检查一下。
我想要的
我想将一些 PowerShell 脚本发布为 Nuget 包以用于构建系统。
我想用PowerShellGet为我做安装工作和版本管理。
我不希望这些脚本成为任何 Visual Studio 解决方案的一部分,而是作为独立的脚本。
使用场景
在任何系统上,配置了 Nuget 提供程序的用户执行:
Install-Module MyModule
从那一刻起,该模块的所有导出对该用户永久可用。 用户也可以再次调用该命令以更新那些脚本的版本。
我做了什么
您可以在此处找到包的当前状态:GitHub
我已将 Nuget 提供程序添加并配置到我们的本地 Nuget 服务器
要执行此操作,请调用
Get-PackageProvider -Name NuGet -ForceBootstrap
和Set-PSRepository -Name My_Nuget_Repo -SourceLocation http://my-nuget/api -InstallationPolicy Trusted
创建了合适的模块,可以通过
在本地导入Import-Module
使用该模块创建并发布了 Nuget 包
问题
我可以通过 Install-Module
cmdlet 安装那个包,稍后我可以在 Get-InstalledModule
列表中看到它。
但是,没有可用的功能。
此外,无论如何,Install-Module
没有从我的包中调用任何脚本:
- 没有从
MyModule.psd1
调用 - 未从
tools
文件夹调用Install.ps1
- 未从
tools
文件夹调用Init.ps1
- 模块导出的 Cmdlet 不可用,
Import-Module
无法导入模块
ScriptsToProcess
(从 Visual Studios Install-Package MyModule
安装时相同的包可以正常工作,调用脚本,导入 PowerShell 模块)。
调查
由于 PowerShellGet
是基于 OneGet
看来问题出在 Install-Package
cmdlet(在 Install-Module
cmdlet 中调用)。
当我从 Visual Studio 执行 Install-Package MyModule
时,会调用 Install.ps1
和 Init.ps1
。但是来自纯 PowerShell 的相同命令什么也不做。
经过长时间的逆向工程,我找到了根本原因
技术原因
魔法标签 PSModule
必须添加到 nuspec 文件中的 <Tags>
。
真实原因
您根本不应该手动创建 nuspec 文件和打包 nuget 包。请改用 Publish-Module
cmdlet。
如何正确操作
我已将 powershellget-module GitHub 更新为:
- 可发布的最小模块示例
- 如何将本地文件夹用作 Nuget 提要的方法
- 该模块的发布、安装和使用
- 没有依赖的参考脚本,全部在本地完成,所以你可以研究它
检查一下。