要发布 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

关于使用 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"

含义为:

  1. 转到 Directory Opus 当前目录
  2. 执行一段 PowerShell 脚本,但执行完之后不退出(这样,我可以观察到我实际上推送的是哪一些包,并且可以知道推送是否出现了错误)
  3. 要执行的命令为 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

Directory Opus 工具栏按钮

于是,当我选中了一个包,按下这个工具栏按钮之后,就可以推送与这个包相同版本的所有的 NuGet 包了。

毕竟我一次编译产生的 NuGet 包太多了,还是需要使用这样的方式来提高一点效率。至于为什么不用持续集成,是因为目前 SourceYard 还不支持在 GitHub 上集成。

一键推送 NuGet 包


参考资料


本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/push-nuget-packages-using-powershell.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 dotnet 职业技术学院 (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系