構建現代的 .Net 應用離不開 Nuget 的支持,而快速打包 Nuget 成了提升生產率的有效方法。shell
爲了實現 Nuget 的快速打包,咱們須要先解決一些前置依賴,不管是 .Net Framework、Mono 或者 .Net Standard(.Net Core),咱們都須要先編譯經過,而後再打包成 Nuget 包,最後再發布到 Nuget 服務器上。json
相關目標 (支持平臺以及依賴):windows
因爲大多數人仍是在 Windows 上開發,因此我下面的教程會以 Windows 爲標準,並旁敲側推到其餘平臺。服務器
在 Visual Studio 中要實現 Nuget 的快速打包主要是藉助 Visual Studio 自帶的外部工具。在實戰以前,咱們要確保依賴都知足了。由於已經安裝了 Visual Studio ,因此默認是已經安裝了 MSBuild 和 Nuget 了。併發
其次,爲了讓自動打包的腳本的字符串儘可能節省空間,咱們會盡可能將對應的依賴加到系統環境變量的 Path 路徑中。通常而言,Msbuild 是在 Visual Studio 安裝目錄下的 Msbuild 目錄中,以下圖所示,在我本機地址是 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\amd64" ,Nuget 最好是另外放置,例如我就把它放到了 "D:\tools" 目錄中。編輯器
若是你足夠細心,能夠發現安裝完 .Net Core 的 SDK 後,默認已經加到了系統的環境變量中了( Mono 也是如此)。ide
而後咱們使用 Visual Studio 打開對應的項目,點擊菜單欄中 " 工具 - 外部工具 ",添加咱們自定義的自動打包發佈腳本。工具
如上圖所示,這裏使用的是 powershell.exe,若是提示找不到 powershell.exe,一樣是將路徑添加到系統環境變量的 path 中。至於參數,能夠是一個ps腳本文件,也能夠是執行腳本語句,在這裏使用腳本語句。初始目錄選中 "目標目錄" 或者 "項目目錄"均可以。visual-studio
從上圖中,能夠看出區分了目標構建,這裏分佈展現 .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 的文件,而後編譯、打包、發佈。(若是你沒有私有的Nuget服務器,能夠參考我另一篇文章)
在這個基礎上能夠作更多的擴展,好比發佈測試版本,就在原來的基礎上添加後綴,如:
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
編寫好自定義的外部工具後,之後每次打包發包均可以按一下按鈕就運行了。
VSCode 是另一個受人歡迎的代碼編輯器,目前不支持 Visual Studio 中的外部工具功能 (若是有,請告訴我),也沒有擴展支持直接發佈 Nuget 包,可是這並不妨礙咱們實現快速自動打包併發布 Nuget 包。
VSCode 中一個有力的功能就是任務功能,咱們能夠經過執行任務來實現一樣的效果。
有時候咱們可能須要脫離 ide 來執行腳本,這個時候文件夾右鍵菜單就顯得十分高效了(能夠多選文件夾發佈)。
具體的操做是修改 windows 的註冊表,具體能夠參考windows 下如何修改右鍵菜單 一文。
若是你以爲麻煩,我這裏有一個示範的註冊表,修改其中Nuget push的參數爲對應的Nuget服務器信息,另存爲 nuget.push.reg
,雙擊便可導入到系統,而後重啓 windows 資源管理器的進程(就是個人電腦的進程)。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Nuget] @="Nuget發佈" [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 添加到系統環境變量的path中。
在 Mac 中實現一樣的功能須要藉助 Automator 的幫助,首先是添加一個服務,選擇運行shell腳本,保存的時候取一個友好的名字。
雖然本文着重講了如何實現 Nuget 多平臺多目標快速自動打包的小目標,但從幾個示例當中就能夠看到自動化腳本的威力。
個人博客即將入駐「雲棲社區」,誠邀技術同仁一同入駐。