Nuget 多平台多目标快速自动打包
構建現(xiàn)代的 .Net 應用離不開 Nuget 的支持,而快速打包 Nuget 成了提高生產率的有效方法。
1. 前置條件
為了實現(xiàn) Nuget 的快速打包,我們需要先解決一些前置依賴,無論是 .Net Framework、Mono 或者 .Net Standard(.Net Core),我們都需要先編譯通過,然后再打包成 Nuget 包,最后再發(fā)布到 Nuget 服務器上。
相關目標 (支持平臺以及依賴):
- .Net Framework (僅 Windows) : MSBuild.exe、Nuget.exe
- Mono (跨平臺) : mono、xbuild、Nuget.exe
- .Net Standard (跨平臺) : dotnet sdk
由于大多數(shù)人還是在 Windows 上開發(fā),所以我下面的教程會以 Windows 為標準,并旁敲側推到其他平臺。
2. 快速打包示例
2.1 Visual Studio 中快速打包
在 Visual Studio 中要實現(xiàn) Nuget 的快速打包主要是借助 Visual Studio 自帶的外部工具。在實戰(zhàn)之前,我們要確保依賴都滿足了。因為已經安裝了 Visual Studio ,所以默認是已經安裝了 MSBuild 和 Nuget 了。
其次,為了讓自動打包的腳本的字符串盡量節(jié)省空間,我們會盡量將對應的依賴加到系統(tǒng)環(huán)境變量的 Path 路徑中。一般而言,Msbuild 是在 Visual Studio 安裝目錄下的 Msbuild 目錄中,如下圖所示,在我本機地址是 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64" ,Nuget 最好是另外放置,例如我就把它放到了 "D:\tools" 目錄中。
如果你足夠細心,可以發(fā)現(xiàn)安裝完 .Net Core 的 SDK 后,默認已經加到了系統(tǒng)的環(huán)境變量中了( Mono 也是如此)。
然后我們使用 Visual Studio 打開對應的項目,點擊菜單欄中 " 工具 - 外部工具 ",添加我們自定義的自動打包發(fā)布腳本。
如上圖所示,這里使用的是 powershell.exe,如果提示找不到 powershell.exe,同樣是將路徑添加到系統(tǒng)環(huán)境變量的 path 中。至于參數(shù),可以是一個ps腳本文件,也可以是執(zhí)行腳本語句,在這里使用腳本語句。初始目錄選中 "目標目錄" 或者 "項目目錄"都可以。
從上圖中,可以看出區(qū)分了目標構建,這里分布展示 .Net Framework 和 .Net Standard 的構建腳本,其中 .Net Framework 類似這樣:
del *.nupkg ; $roj=dir *.csproj ;msbuild $roj; nuget pack $roj ; $nupkg= dir *.nupkg; nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget而 .Net Standard 則是:
del *.nupkg ; dotnet build ;dotnet pack --output $pwd;$nupkg= dir *.nupkg; dotnet nuget push $nupkg nugetpassword -Source http://192.168.9.1/nuget至于運行在非 Windows 上的 Mono 則可能是:
rm *.nupkg ; $roj= *.csproj ;xbuild $roj; $ver= date -d yesterday +%Y%m%d%H%M;nuget pack $roj -Suffix $ver; $nupkg= *.nupkg; mono nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget他們共同的特征都是先刪除當前路徑的 nupkg 的文件,然后編譯、打包、發(fā)布。(如果你沒有私有的Nuget服務器,可以參考我另外一篇文章)
在這個基礎上可以做更多的擴展,比如發(fā)布測試版本,就在原來的基礎上添加后綴,如:
del *.nupkg ; $roj=dir *.csproj ;msbuild $roj; $ver=\"beta-\"+(Get-Date).ToString(\"yyyyMMddHHmm\");nuget pack $roj -Suffix $ver; $nupkg= dir *.nupkg; nuget.exe push $nupkg nugetpassword -Source http://192.168.9.1/nuget編寫好自定義的外部工具后,以后每次打包發(fā)包都可以按一下按鈕就運行了。
2.2 VSCode
VSCode 是另外一個受人歡迎的代碼編輯器,目前不支持 Visual Studio 中的外部工具功能 (如果有,請告訴我),也沒有擴展支持直接發(fā)布 Nuget 包,但是這并不妨礙我們實現(xiàn)快速自動打包并發(fā)布 Nuget 包。
VSCode 中一個有力的功能就是任務功能,我們可以通過執(zhí)行任務來實現(xiàn)同樣的效果。
2.3 文件夾右鍵菜單
2.3.1 Windows 環(huán)境中示例
有時候我們可能需要脫離 ide 來執(zhí)行腳本,這個時候文件夾右鍵菜單就顯得十分高效了(可以多選文件夾發(fā)布)。
具體的操作是修改 windows 的注冊表,具體可以參考windows 下如何修改右鍵菜單 一文。
如果你覺得麻煩,我這里有一個示范的注冊表,修改其中Nuget push的參數(shù)為對應的Nuget服務器信息,另存為 nuget.push.reg,雙擊即可導入到系統(tǒng),然后重啟 windows 資源管理器的進程(就是我的電腦的進程)。
Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Nuget] @="Nuget發(fā)布"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Nuget\command] @="powershell.exe -noexit -command Set-Location '%V' ;powershell.exe -c \"echo $pwd;del *.nupkg ;dotnet pack --output $pwd;$nupkg= dir *.nupkg; dotnet nuget push $nupkg -k 123456 -s http://192.168.1.1;\""如果提示找不到程序,需要把 powershell.exe 添加到系統(tǒng)環(huán)境變量的path中。
2.3.2 Mac 環(huán)境中示例
在 Mac 中實現(xiàn)同樣的功能需要借助 Automator 的幫助,首先是添加一個服務,選擇運行shell腳本,保存的時候取一個友好的名字。
3. 結語
雖然本文著重講了如何實現(xiàn) Nuget 多平臺多目標快速自動打包的小目標,但從幾個示例當中就可以看到自動化腳本的威力。
我的博客即將入駐“云棲社區(qū)”,誠邀技術同仁一同入駐。
轉載于:https://www.cnblogs.com/chenug/p/9290281.html
總結
以上是生活随笔為你收集整理的Nuget 多平台多目标快速自动打包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nodejs中的模块系统
- 下一篇: day01 js三种导入html的方法