dotnet 用 NuGet 將自己的工具作爲 dotnet tool 分發

我寫了一個有趣的工具,我如何將這個工具給到小夥伴予力衆生呢?只需要設定這個工具是 dotnet tool 工具就可以通過 NuGet 分發出去啦。幾乎所有的 dotnet 開發者都能用上 NuGet 服務,也就是此工具可以被幾乎所有的 dotnet 開發者下載使用。那麼製作難度有多大呢?基本上有一個現成的項目前提下,只需兩句代碼,一句命令行,就能完成製作

本文分爲兩部分,第一部分就是如何打包一個 dotnet tool 工具,第二部分是如何分發這個工具

在開始之前,我推薦你先安裝好 VisualStudio 工具,在 VisualStudio 2019 的幫助下,能夠快速簡單進行打包和發佈

如何打包 dotnet tool 工具

其實 dotnet tool 工具沒有任何黑科技,原理就是用 dotnet tool install 命令,這個命令將會通過後續傳入的包的 id 從 NuGet 上尋找這個工具,下載到本地。此時要求工具本身不需要做安裝包等類似的部署,而是直接複製文件過來就能使用的工具

工具的前提要求就是,這個工具本身通過複製文件的形式就能在設備上運行,無需部署

而 NuGet 包的本質就是一個壓縮包,將這個工具壓縮,然後修改爲 NuGet 包,上傳到 NuGet 上,這樣就支持其他人從 NuGet 上下載這個工具的壓縮包。那麼工具和其他庫的包有什麼不同?其實就是在格式上標記這個包是一個工具包而不是一個庫的包。關於這個工具包的更多細節請看 dotnet 手工打一個 dotnet tool 包

知道了這個原理之後咱就知道了,如果是 dotnet core 純控制檯工具,是可以在任何能運行 dotnet 的平臺上運行的。而如果是 WPF .NET Core 那麼就是能在 win7 sp1 和以上的系統上運行。如果是採用跨平臺 UI 技術如 Avalonia 等,那麼就能支持在對應平臺上運行。這也就是沒有限制工具一定只能作爲控制檯了

將一個現存的 dotnet net core 工具作爲 dotnet tool 發佈很簡單,只有以下步驟

根據 Edi 的博客教你自制.NET Core Global Tools可以看到只需要在 VisualStudio 2019 裏面雙擊項目,就可以進入編輯 csproj 文件了,當然右擊編輯項目也可以。注意要能雙擊進去編輯 csproj 要求使用 SDK Style 格式的項目文件,本文也只對此格式的項目文件生效

在裏面添加下面代碼

<PackAsTool>true</PackAsTool>

<ToolCommandName>azureblobsync</ToolCommandName>

上面代碼的 PackAsTool 就是告訴 VS 等工具這是一個 dotnet tool 工具,到時候將它輸出爲 NuGet 庫,同時在 NuGet 庫裏面標記這是工具

第二句代碼是 ToolCommandName 這裏面的內容就是用來在安裝工具之後,通過什麼樣的命令啓動這個工具,換句話說就是安裝工具用的是 NuGet 包的 Id 而和執行工具用的命令可以不相同

此時這個工具打包之後,在安裝完成之後,在cmd裏面啓動這個工具就是通過 azureblobsync 這句命令了

在 VisualStudio 2019 裏面右擊項目,點擊打包,此時就可以看到 VisualStudio 打出了一個 NuGet 包了。如果不夠自信的話,可以先測試測試這個打出來的工具包

測試方法非必要,作爲一個自信的程序員,自己寫出來的工具怎麼需要測試呢?反正有問題了再升級一個版本發佈咯

等等,我打出來的 NuGet 包放在哪裏?其實從 VisualStudio 的輸出就可以看到類似下面代碼

已成功創建包“D:\程序\dotnet 職業技術學院\dotnetCampus.NugetMergeFixTool\bin\Debug\NugetMergeFixTool.1.0.6.nupkg”

我要安裝這個本地包可以如何做?

右擊項目管理 Nuget 包

點擊設置

點擊添加一個本地的包,修改輸出包的文件夾

設置完成之後打開cmd命令行輸入下面代碼安裝自己的 NuGet 庫

dotnet tool install -g NugetMergeFixTool 

如果安裝成功了,通過 azureblobsync 命令試試能否打開自己的工具。注意請將上面的 NugetMergeFixTool 修改爲升級上你打包出來的 NuGet 的 Id 哦,一般 NuGet 的 Id 就是 nuget 包的名字。而 azureblobsync 就是在上方給 csproj 設置的工具啓動名了

如果覺得上面步驟太繁瑣,也可以忽略,畢竟這只是測試使用而已。作爲自信的程序員,代碼不用測試就能發佈(這是說笑的,小朋友不要模仿

分發工具

接下來我如何將我這個庫上傳到 NuGet 官方網站?首先打開 https://www.nuget.org/ 網站,點擊 sign in 登錄

有微軟帳號的用微軟帳號,沒有微軟帳號的,自己註冊一個,註冊步驟很簡單,基本上看界面就會了

註冊完成之後點擊 Upload 上傳自己剛纔打出來的庫

理論上只要不是有提示出錯的,其他都可以忽略,點擊上傳之後就等待一小段時間,如去喫個飯。回來基本上就可以看到發佈完成了,此時可以告訴小夥伴在命令行輸入一段神奇的代碼安裝你的工具,然後使用一段有趣的代碼啓動你的工具

dotnet tool install -g NugetMergeFixTool // 這句代碼安裝工具
azureblobsync // 執行工具

注意將上面代碼的 NugetMergeFixTool 和 azureblobsync 分別更換爲你的 NuGet 包的 Id 和你的工具啓動名

這就是 dotnet 工具的強大了,可以通過 dotnet 工具使用 NuGet 上超級多的工具

當然,程序員都喜歡自動化,如果是開源在 Github 的可以使用 dotnet 配置 github 自動打包上傳 nuget 文件

同時包含 GitHub 自動用 Action 打包發佈以及整個 dotnet tool 配置的代碼請看 dotnet-campus/dotnetCampus.NugetMergeFixTool: 傳說博哥的工具 可以用來修復 git 合併的時候將 csproj 合併壞了的問題,也可以用來快速升級 NuGet 庫

上面這個工具是一個適用於大團隊裏面合併代碼衝突的快速修復工具,可以提升超級多的效率

更多博客

我搭建了自己的博客 https://blog.lindexi.com/ 歡迎大家訪問,裏面有很多新的博客。只有在我看到博客寫成熟之後纔會放在csdn或博客園,但是一旦發佈了就不再更新

如果在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎大家加入

如有不方便在博客評論的問題,可以加我 QQ 2844808902 交流

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章