要发布 NuGet 包,只需要执行命令 nuget push xxx.nupkg
即可,或者去 nuget.org 点鼠标上传。
不过,如果你有很多的 NuGet 包并且经常需要推送的话,也可以集成到 Directory Opus 或者 Total Commander 中。
NuGet 推送命令
NuGet 推送命令可直接在微软官方文档中阅读到:
在你已经设置了 ApiKey 的情况下:
nuget setapikey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -source https://api.nuget.org/v3/index.json
之后你只需要执行一句命令即可:
nuget.exe push Walterlv.Themes.FluentDesign.Source.0.8.0-alpha.nupkg -source https://api.nuget.org/v3/index.json
或者推送此文件夹下 0.8.0-alpha 版本的所有 NuGet 包:
nuget.exe push *.0.8.0-alpha.nupkg -source https://api.nuget.org/v3/index.json
用 PowerShell 包装一下
要执行 NuGet 的推送命令,我们需要一个可以执行命令的终端,比如 PowerShell。命令的执行结果我们也可以直接在终端看到。
不过,如果命令是集成到其他工具里面,那么就不一定能够看得到命令的执行结果了。
这个时候,可以考虑用 PowerShell 间接执行这个命令:
# PowerShell 版本
powershell -NoExit -c "nuget push *.0.8.0-alpha.nupkg -Source https://api.nuget.org/v3/index.json"
# PowerShell Core 版本
pwsh -NoExit -c "nuget push *.0.8.0-alpha.nupkg -Source https://api.nuget.org/v3/index.json"
关于使用 PowerShell 间接执行命令的更多细节,可以参考我的另一篇博客:
集成到 Directory Opus
我将这个命令集成到了 Directory Opus 中,这样,一次点击或者一个快捷键就能发布某个特定版本的所有的 NuGet 包了。
关于使用 Directory Opus 继承工具栏按钮的细节,可以阅读我的另一篇博客:
具体来说,就是安装上文中所述的方法添加一个按钮,在按钮当中需要执行的脚本如下:
cd "{sourcepath} "
pwsh -NoExit -c "$file=[Regex]::Match('{file}', '\.\d+\.\d+\.\d+.+.nupkg').Value; nuget push *$file -Source https://api.nuget.org/v3/index.json"
含义为:
- 转到 Directory Opus 当前目录
- 执行一段 PowerShell 脚本,但执行完之后不退出(这样,我可以观察到我实际上推送的是哪一些包,并且可以知道推送是否出现了错误)
- 要执行的命令为
nuget push *.xxx.nupkg -Source https://api.nuget.org/v3/index.json
- 其中,中间的 xxx 是使用正则表达式匹配的
{file}
文件名 {file}
是 Directory Opus 当前选中的文件,我用正则表达式匹配出其版本号和后面的.nupkg
后缀- 将正则表达式匹配出来的文本作为
nuget push
的包,最终生成的命令会非常类似于本文一开始提到的命令nuget push *.0.8.0-alpha.nupkg -Source https://api.nuget.org/v3/index.json
- 其中,中间的 xxx 是使用正则表达式匹配的
于是,当我选中了一个包,按下这个工具栏按钮之后,就可以推送与这个包相同版本的所有的 NuGet 包了。
毕竟我一次编译产生的 NuGet 包太多了,还是需要使用这样的方式来提高一点效率。至于为什么不用持续集成,是因为目前 SourceYard 还不支持在 GitHub 上集成。
参考资料
本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/push-nuget-packages-using-powershell.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 dotnet 职业技术学院 (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。