Nuget 多平台多目标快速自动打包
構(gòu)建現(xiàn)代的 .Net 應(yīng)用離不開 Nuget 的支持,而快速打包 Nuget 成了提高生產(chǎn)率的有效方法。
1. 前置條件
為了實現(xiàn) Nuget 的快速打包,我們需要先解決一些前置依賴,無論是 .Net Framework、Mono 或者 .Net Standard(.Net Core),我們都需要先編譯通過,然后再打包成 Nuget 包,最后再發(fā)布到 Nuget 服務(wù)器上。
相關(guān)目標(biāo) (支持平臺以及依賴):
- .Net Framework (僅 Windows) : MSBuild.exe、Nuget.exe
- Mono (跨平臺) : mono、xbuild、Nuget.exe
- .Net Standard (跨平臺) : dotnet sdk
由于大多數(shù)人還是在 Windows 上開發(fā),所以我下面的教程會以 Windows 為標(biāo)準(zhǔn),并旁敲側(cè)推到其他平臺。
2. 快速打包示例
2.1 Visual Studio 中快速打包
在 Visual Studio 中要實現(xiàn) Nuget 的快速打包主要是借助 Visual Studio 自帶的外部工具。在實戰(zhàn)之前,我們要確保依賴都滿足了。因為已經(jīng)安裝了 Visual Studio ,所以默認(rèn)是已經(jīng)安裝了 MSBuild 和 Nuget 了。
其次,為了讓自動打包的腳本的字符串盡量節(jié)省空間,我們會盡量將對應(yīng)的依賴加到系統(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" 目錄中。
如果你足夠細(xì)心,可以發(fā)現(xiàn)安裝完 .Net Core 的 SDK 后,默認(rèn)已經(jīng)加到了系統(tǒng)的環(huán)境變量中了( Mono 也是如此)。
然后我們使用 Visual Studio 打開對應(yīng)的項目,點擊菜單欄中 " 工具 - 外部工具 ",添加我們自定義的自動打包發(fā)布腳本。
如上圖所示,這里使用的是 powershell.exe,如果提示找不到 powershell.exe,同樣是將路徑添加到系統(tǒng)環(huán)境變量的 path 中。至于參數(shù),可以是一個ps腳本文件,也可以是執(zhí)行腳本語句,在這里使用腳本語句。初始目錄選中 "目標(biāo)目錄" 或者 "項目目錄"都可以。
從上圖中,可以看出區(qū)分了目標(biāo)構(gòu)建,這里分布展示 .Net Framework 和 .Net Standard 的構(gòu)建腳本,其中 .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他們共同的特征都是先刪除當(dāng)前路徑的 nupkg 的文件,然后編譯、打包、發(fā)布。(如果你沒有私有的Nuget服務(wù)器,可以參考我另外一篇文章)
在這個基礎(chǔ)上可以做更多的擴(kuò)展,比如發(fā)布測試版本,就在原來的基礎(chǔ)上添加后綴,如:
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 中的外部工具功能 (如果有,請告訴我),也沒有擴(kuò)展支持直接發(fā)布 Nuget 包,但是這并不妨礙我們實現(xiàn)快速自動打包并發(fā)布 Nuget 包。
VSCode 中一個有力的功能就是任務(wù)功能,我們可以通過執(zhí)行任務(wù)來實現(xiàn)同樣的效果。
2.3 文件夾右鍵菜單
2.3.1 Windows 環(huán)境中示例
有時候我們可能需要脫離 ide 來執(zhí)行腳本,這個時候文件夾右鍵菜單就顯得十分高效了(可以多選文件夾發(fā)布)。
具體的操作是修改 windows 的注冊表,具體可以參考windows 下如何修改右鍵菜單 一文。
如果你覺得麻煩,我這里有一個示范的注冊表,修改其中Nuget push的參數(shù)為對應(yīng)的Nuget服務(wù)器信息,另存為 nuget.push.reg,雙擊即可導(dǎo)入到系統(tǒng),然后重啟 windows 資源管理器的進(jìn)程(就是我的電腦的進(jìn)程)。
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 的幫助,首先是添加一個服務(wù),選擇運行shell腳本,保存的時候取一個友好的名字。
3. 結(jié)語
雖然本文著重講了如何實現(xiàn) Nuget 多平臺多目標(biāo)快速自動打包的小目標(biāo),但從幾個示例當(dāng)中就可以看到自動化腳本的威力。
我的博客即將入駐“云棲社區(qū)”,誠邀技術(shù)同仁一同入駐。
轉(zhuǎn)載于:https://www.cnblogs.com/chenug/p/9290281.html
總結(jié)
以上是生活随笔為你收集整理的Nuget 多平台多目标快速自动打包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nodejs中的模块系统
- 下一篇: day01 js三种导入html的方法