好,回歸正題。但是我們都知道,圖形化最大的問題就是自動化不高。
這是我其中的一個 nuget 包,可以看見里面的文件還是比較多的,那么我每一次重新編譯,需要發布新版本的時候,就得把里面大部分的文件都替換成新的文件。每次都一個一個的替換,煩啊。而且有時候還得擔心有沒有替換少了。那么自動化打包肯定是值得研究研究一番了。
在 nuget 官網上面我們可以找到一篇關于如何創建 nuget 包的教程:https://docs.nuget.org/Create/Creating-and-Publishing-a-Package。
那么我們先下載這個命令行工具下來。
然后準備我們需要打包的文件(就是 dll 之類的東西)。
看了下文檔,說是支持讀取直接 csPRoj 文件打包,那我們先試一下吧,畢竟程序員的準則就是能簡單就簡單,能懶就懶。
這里我的項目結構是這樣的:
然后我們運行 cmd 并輸入命令
報了個錯,重新生成一下項目吧,再次運行。
好像成了,看看目錄。
但是這 dll 所屬的分類,錯了吧,我建的可是 Win10 應用程序的 dll。。。
既然 csproj 方案不行的話,我們繼續看文檔。看見有一個通過描述 nuget 包的方案:https://docs.nuget.org/Create/Creating-and-Publishing-a-Package#create-the-manifest
要建立這么一個描述文件也很簡單,跑個命令
然后我們用文本編輯器來打開這個新的 Package.nuspec 文件。
可以看見是一個 xml 文件,然后修改下里面的屬性就可以了。
再次執行。
有警告,簡單看了下,是說不知道應該打包哪些文件。
那么繼續找找文檔,最后我們可以發現這個。
修改下我們的 nuspec 文件。
新加上紅色部分,也就是將這個 dll 打包進 nuget 包的 lib/uap10.0/ 這個目錄里面。
再次執行打包命令。
這次沒警告了。
而且包的結構也沒問題。
那么只要編寫好 nuspec 里面的 files 節點的話,以后執行 nuget pack XX.nuspec 這個命令的話,就能夠簡單地生成 nuget 包了。
為了再懶一點,我們將上面這個命令弄成批處理。
%~dp0nuget.exe pack %~dp0Package.nuspec -OutputDirectory %~dp0
%~dp0 這個是獲取當前正在執行的這個 bat 文件的所在目錄。
那么最后就變成這樣:
確保這三個文件放在一起,然后執行 package.bat 就能在當前目錄生成 nuget 包了。
接下來我們就可以發布 nuget 包了,用命令也行,但保障一點,我還是用 GUI 工具來發布(畢竟發布前再檢查一次還是有必要的)。
用 Nuget Package Explorer 打開上面生成的那個 nuget 包。
按這里就可以了。
到最后一步我們已經使用批處理來做了,那么可以再玩的花樣就多去了,例如用 PowerShell 來自動化包的版本。在項目的 AssemblyInfo.cs 有一個 AssemblyVersion 的 Attribute,然后我們就可以用 PowerShell 來先讀取這個版本號,然后修改 nuspec 文件里的 version 節點,再生成包。其實我現在就已經是這么做了,鑒于我 PowerShell 也沒學過,那段代碼就不放出來丟臉了
。大家可以發散思維,期望在 nuget 上能看見園友發布的包包
。
新聞熱點
疑難解答