什麼是NuGet?
官網上的解釋:NuGet is the package manager for the Microsoft development platform including .NET. The NuGet client tools provide the ability to produce and consume packages. The NuGet Gallery is the central package repository used by all package authors and consumers.
大致的意思:NuGet 是一種 Visual Studio 擴充套件工具,它能夠簡化在 Visual Studio 專案中新增、更新和刪除庫(部署為程式包)的操作。
可以去看一下NuGet 百度百科的介紹。
為什麼用NuGet?
簡單的說NuGet可以是我們的工作更方便,當我們的專案裡要引用到的一些庫時候,比如JQuery、Newtonsoft.Json、log4net等,我們需要從網上下載這些庫,然後依次拷貝到各個專案中,當有的類庫有更新時又不得不再重複一遍很是繁瑣 ,這時就可以考慮使用NuGet來幫我們管理和更新這些類庫,而且更新類庫時會自動新增類庫的相關引用,方便至極。
在我們做專案的過程中體會到NuGet最大的好處就是可以搭建自己的類庫伺服器,在開發1.0和2.0期間,我們是一個系統一個解決方案,當兩個系統之間存在互動時,就需要引用另一個系統的Dll檔案,如果沒有NuGet的話,每一次Dll檔案更新,就需要去拷貝一份,放到專案的資料夾下,在重新引用,過程顯得非常的繁瑣。並且在我們3.0的時候,再次對系統進行了細化,每一個系統的每一個模組一個解決方案,也就是業務顆粒化。可想而知,如果還用拷貝的方式的話,有種作死的節奏~~現在用了NuGet,世界開始變得不同了。
怎麼使用NuGet?
STEP1 在NuGet官網上註冊並獲取API Key
首先,你需要到NuGet上註冊一個新的賬號,然後在My Account頁面,獲取一個API Key,這個過程很簡單,我就不作說明了。
STEP2 下載NuGet.exe
使用之前,需要先下載NuGet.exe,下載連結:http://nuget.codeplex.com/downloads/get/669083為了方便使用,設定機器的PATH環境變數,將其NuGet.exe的路徑新增到PATH變數中。我放在F:\Program files下,所以路徑為F:\Program files。
STEP3 設定API Key
在官網上找到你的API Key
開啟CMD,找到NuGet.exe
的路徑,並執行,然後輸入下面的命令:
1 2 3 4 |
nuget setApiKey <my_api_key> '''示例''' nuget setApiKey 5fadcb82-ee54-4164-853a-7d924aa2e059 |
執行結果:
SETP4 開發自己的類庫
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NuGetTest { public class NugetTest { public static String ReturnInfo() { return "時光荏苒,歲月如梭,這一年我們就要畢業了!"; } } } |
然後開啟AssemblyInfo.cs
檔案,將assembly
的屬性設定好,記得再設定一下AssemblyVersion
特性,以指定我們類庫的版本。目前使用1.0.0.0版本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; ''' 有關程式集的常規資訊通過以下''' ''' 特性集控制。更改這些特性值可修改''' ''' 與程式集關聯的資訊。''' [assembly: AssemblyTitle("NuGetTest")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("LingZaiCompany")] [assembly: AssemblyProduct("NuGetTest")] [assembly: AssemblyCopyright("Copyright © 2015")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] ''' 將 ComVisible 設定為 false 使此程式集中的型別''' ''' 對 COM 元件不可見。如果需要從 COM 訪問此程式集中的型別,''' ''' 則將該型別上的 ComVisible 特性設定為 true。''' [assembly: ComVisible(false)] ''' 如果此專案向 COM 公開,則下列 GUID 用於型別庫的 ID''' [assembly: Guid("02721613-8a9e-4197-a1fa-b54b2d3c8320")] ''' 程式集的版本資訊由下面四個值組成:''' ''' 主版本''' ''' 次版本''' ''' 生成號''' ''' 修訂號''' '''可以指定所有這些值,也可以使用“生成號”和“修訂號”的預設值,''' ''' 方法是按如下所示使用“*”:''' ''' [assembly: AssemblyVersion("1.0.*")]''' [assembly: AssemblyVersion("1.0.0.0")] [assembly: AssemblyFileVersion("1.0.0.0")] |
設定好後,編譯整個專案待用。
STEP5 產生並修改nuspec
nuspec是NuGet將專案打包成nupkg的輸入檔案,可以通過nuget spec
命令產生。在命令提示符下,進入NugetTest.csproj
檔案所在目錄,然後執行:
1 |
nuget spec |
執行結果:
用記事本開啟NuGetTest.nuspec
檔案,注意裡面的$xxx$
巨集,這些就是引用了AssemblyInfo.cs
中的設定值,在編譯產生package的時候,會使用AssemblyInfo.cs
中的相應值進行替換。完成編輯後,我們的nuspec檔案如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>Lingnugettest</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2015</copyright> <tags>Tag1 Tag2</tags> </metadata> </package> |
注意兩點:1、$description$
使用AssemblyDescriptionAttribute
的值進行替換,在產生package之前,一定要記得先編譯專案,否則會提示$description$
找不到的錯誤;
STEP6 產生類庫包(Library Package)
在NugetTest.csproj的路徑下,使用下面的命令產生類庫包:
1 |
nuget pack NuGetTest.csproj |
執行結果:
STEP7 釋出類庫包
使用下面的命令:
1 |
nuget push NuGetTest.1.0.0.0.nupkg |
執行時遇到點問題:
上面的這個問題,主要原因是因為API Key 一臺電腦只能用一個。如果用第二個API Key在同一臺電腦上釋出另一個package的話就無法釋出,就會報這個錯。
下面是釋出成功的內容:
STEP8 測試以及更新類庫包
在解決方案中右鍵解決方案—-管理解決方案的NuGet程式包—-聯機,輸入自己的類庫包名。安裝就可以了。
然後是更新,更新的時候記得更改AssemblyInfo.cs
中的版本號的資訊,然後再重新執行一遍下面的cmd:
1 2 3 |
nuget pack *.csproj nuget push *.nupkg |
在開啟測試程式,在更新中找到自己更新的包更新就可以了。
善於利用工具,提高我們的開發效率!