軟體行業和其他行業不相同,在很多行業想要復用前人的知識,需要重新再製造一遍。而軟體行業,特別是 dotnet 系的技術,想要用前人的經驗只需要使用前人寫的庫。隨著越來越多的基礎設施和底層庫的積累,現在開發一個軟體的速度會越來越快。在使用 dotnet 技術棧時,可以通過 NuGet 方便使用前人的庫或發布自己的庫和工具。有很多功能,其實只需要知道用哪個庫和如何用,底層細節可以在完全不知道不了解的情況下也能用起來
回到上篇博客最後的問題,我想要寫一個軟體,用來發射衛星,請問需要幾步?
https://blog.lindexi.com/post/%E7%A8%8B%E5%BA%8F%E7%8C%BF%E4%BF%AE%E5%85%BB-%E4%BB%8E%E5%AE%89%E8%A3%85-dotnet-%E5%BC%80%E5%A7%8B.html
假設現在已經有大佬將創建衛星和發射衛星等的實現都封裝在一個庫中,那麼此時要發射衛星就非常簡單了
第一步:通過 NuGet 安裝發射衛星的庫
第二步:調用庫裡面發射衛星函數
第三步:使用 dotnet run 構建運行程序
沒錯,只需要三步
用 NuGet 就是怎麼神奇的東西,根據 GitHub 的統計,每天都會被小夥伴上傳幾百萬行代碼(數據不準確)而我每天最多只能看一萬行代碼,這就意味著有大量的知識或專業的知識其實我很難快速掌握。但是我又想做這方面的開放,難道我需要和之前上學一樣,從原理從最底層開始學習,我才可以進行開發?其實不然,如最簡單的矩陣轉換,我只需要知道調用哪個函數就會發生什麼,而不是去了解什麼是矩陣,矩陣的轉換的最優算法是什麼,如何寫,有哪些邊界。其實我大部分時間寫出來的邏輯都沒有從 NuGet 上使用其他小夥伴做的庫的方法來的穩當
按照中國的教科書,在學習一個東西之前都需要吹半天,而現在吹的部分也差不多了,下面就是實戰啦
當然,我不會告訴大家如何發射衛星,這個技術太可怕了。請讓咱來個簡單一點的東西,在開始之前需要了解什麼是 NuGet 工具。其實 NuGet 就是一個用來存放庫的東西,這裡的 庫 指的是小夥伴編寫上傳的封裝好的東西。可以引用庫來做很多有趣的事情。而 NuGet 分為兩部分,一部分在雲上面,就是上面所說的用來存放庫的功能。另一部分放在本地用來安裝和管理項目裡面用到的庫
如果小夥伴遇到一個功能不知道如何實現,在網上是期望找到原始碼複製粘貼好呢?還是找到一個現成的庫安裝好呢?其實我比較推薦後面一個方法
在安裝完成了 dotnet 工具之後,可以方便使用 NuGet 在本地的一個項目裡面安裝神奇的庫,我想要讀取一個PPT文件裡面的所有頁面的所有文本將這些文本輸出,此時我可以如何做?想要做PPT解析可不是一個簡單的事情,但是有了 NuGet 工具,好像就簡單了好多了
我通過神奇的bing找到了微軟開源的官方 Office 解析庫 OpenXml 庫,這是一個跨平臺的庫,可以在任何的 dotnet core 和 dotnet framework 項目上使用,首先就是按照慣例先安裝 NuGet 庫。如何安裝呢?
dotnet new console -o WhocohefurWallqemwaychurgu
在進入到 WhocohefurWallqemwaychurgu 文件夾之後,可以使用下面代碼用 dotnet 工具安裝 Openxml 庫
dotnet add package DocumentFormat.OpenXml
此時就完成了庫的安裝了,接下來就是使用這個庫啦,假設在 E:\lindexi\測試.pptx 的文件就是本文想要測試輸出的文件,可以在 Program 使用下面代碼,就是這麼方便就完成了一個 PPT 的解析了
using (var presentationDocument = DocumentFormat.OpenXml.Packaging.PresentationDocument.Open(@"E:\lindexi\測試.pptx", false))
{
var presentationPart = presentationDocument.PresentationPart;
var presentation = presentationPart.Presentation;
// 先獲取頁面
var slideIdList = presentation.SlideIdList;
foreach (var slideId in slideIdList.ChildElements.OfType<SlideId>())
{
// 獲取頁面內容
var slidePart = (SlidePart) presentationPart.GetPartById(slideId.RelationshipId);
foreach (var paragraph in
slidePart.Slide
.Descendants<DocumentFormat.OpenXml.Drawing.Paragraph>())
{
// 獲取段落
// 在 PPT 文本是放在形狀裡面
foreach (var text in
paragraph.Descendants<DocumentFormat.OpenXml.Drawing.Text>())
{
// 獲取段落文本,這樣不會添加文本格式
Debug.WriteLine(text.Text);
}
}
}
}
這個項目所有代碼放在 github 歡迎小夥伴訪問
通過上面例子小夥伴可以看到用 NuGet 的話,將問題從如何理解一個新的知識和如何應用和編寫代碼轉換為如何尋找一個庫,以及如何使用這個庫。按照學習模型的分法,尋找一個庫和學習如何使用這個庫都是屬於舒適區範圍。而學習一個新知識,如學習 PPT 的格式等,這些就是屬於學習模型裡面的恐慌區了,學起來的難度和需要投入的時間都是很大的
剛才都是通過命令行的形式安裝庫的,我是不是還可以使用太陽系裡面最強的 IDE 來進行管理 NuGet 庫呢?沒錯請打開 VisualStudio 創建一個控制臺項目,我這裡還是依然使用剛才的命令行創建的項目為例子。可以雙擊 xx.csproj 打開項目,此時的 VisualStudio 在你關閉它時會提示保存 sln 文件,而不需要先新建 sln 文件
右擊項目點擊管理 NuGet 程序包
這裡提供了安裝 NuGet 庫的功能以及卸載庫的功能,只需要在搜尋裡面輸入對應的庫的名字,支持模糊搜尋的功能,找到對應的庫,點擊安裝就可以了
多使用 NuGet 庫,可以減少自己寫的代碼的時間,如果看到一個庫裡面的下載量很多,那麼證明這個庫還是有比較多小夥伴用的。換句話就是有很多小夥伴幫你踩坑了,基本上可以放心使用
我是一個助人為樂的逗比,我想要將自己寫的代碼打包為庫讓更多的小夥伴能用上我的逗比代碼,我可以怎麼做?
很簡單,在 VisualStudio 右擊打包就可以啦
請看 VisualStudio 使用新項目格式快速打出 Nuget 包 基本上5分鐘內就可以完成打包啦
https://blog.lindexi.com/post/VisualStudio-%E4%BD%BF%E7%94%A8%E6%96%B0%E9%A1%B9%E7%9B%AE%E6%A0%BC%E5%BC%8F%E5%BF%AB%E9%80%9F%E6%89%93%E5%87%BA-Nuget-%E5%8C%85.html
不想打開 VisualStudio 的話,可以用上文介紹的 dotnet pack 一句話進行打包,當然這個命令就只能打包,而對包裡面的作者什麼的設置就需要手動編輯 csproj 文件啦,沒有在 VisualStudio 裡面那麼方便啦
很不辛苦,很簡單打出一個包出來了,請問如何發布呢?訪問 https://www.nuget.org/ 官網,點擊上傳就可以啦。想要進行自動化的發布,在 Github 上往主分支合併時就自動發布,請看 Github 給倉庫上傳 NuGet 庫
https://blog.lindexi.com/post/Github-%E7%BB%99%E4%BB%93%E5%BA%93%E4%B8%8A%E4%BC%A0-NuGet-%E5%BA%93.html