NuGet是一個為大家所熟知的Visual Studio擴展,通過這個擴展,開發人員可以非常方便地在Visual Studio中安裝或更新項目中所需要的第三方組件,同時也可以通過NuGet來安裝一些Visual Studio的插件等。作為一名開發人員,您可能也會開發一些公共組件以供他人使用,本文將一步步介紹如何以最簡單的方式將自己所開發的類庫包發布到nuget上,以供更多的人使用。
使用NuGet發布自己的類庫包(Library Package)步驟:
STEP 1:注冊並獲取API Key
首先,你需要到NuGet上注冊一個新的賬號,然后在My Account頁面,獲取一個API Key,這個過程很簡單,我就不作說明了。
STEP 2:下載NuGet.exe
NuGet有個命令行工具:NuGet.exe;為了方便使用,請設置機器的PATH環境變量【exe所在目錄】,將NuGet.exe的路徑添加到PATH中。
在http://nuget.codeplex.com/releases頁面底部找到NuGet.exe,點擊下載即可
STEP 3:設置API Key
CMD使用以下命令設置NuGet API Key:
nuget setApiKey <my_api_key>
記得將上面的my_api_key替換為STEP 1中獲得的API Key。
STEP 4:開發自己的類庫
上面我們新建了一個類庫:DaxnetNugetTest,並通過NuGet添加了對Castle.Core的引用,現在我們添加一些代碼,來使用Castle.Core所提供的一些功能。我們將Class1.cs改名為CastleHelper.cs,此時也會將Class1類改名為CastleHelper。在CastleHelper.cs中寫入以下代碼:
public class CastleHelper { public static Castle.Core.Pair<int, int> GetIntPair() { return new Castle.Core.Pair<int, int>(20, 30); } }
然后,打開AssemblyInfo.cs文件,將assembly的屬性設置好,記得再設置一下AssemblyVersion特性,以指定我們類庫的版本。目前我們使用1.0.0.0版本:
[assembly: AssemblyTitle("DaxnetNugetTest")] [assembly: AssemblyDescription("Daxnet's test of the NuGet.")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("daxnet")] [assembly: AssemblyProduct("DaxnetNugetTest")] [assembly: AssemblyCopyright("Copyright © daxnet 2013")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("20662b9f-91de-4515-9c8c-ced3d61589e1")] [assembly: AssemblyVersion("1.0.0.0")]
全部設置好以后,編譯整個項目待用。
STEP 5:產生並修改nuspec
nuspec是NuGet將項目打包成nupkg的輸入文件,可以通過nuget spec命令產生。在命令提示符下,進入DaxnetNugetTest.csproj文件所在目錄,然后執行:
1
|
nuget spec
|
此時會提示創建成功:
用notepad打開DaxnetNugetTest.nuspec文件,把需要替換的信息替換掉,不需要的tag全部刪掉,注意里面的$xxx$宏,這些就是引用了AssemblyInfo.cs中的設置值,在編譯產生package的時候,會使用AssemblyInfo.cs中的相應值進行替換。完成編輯后,我們的nuspec文件如下:
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>http://www.apache.org/licenses/LICENSE-2.0.html</licenseUrl> <projectUrl>http://apworks.org</projectUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>First release</releaseNotes> <copyright>Copyright 2013</copyright> </metadata> </package>
注意兩點:1、$description$使用AssemblyDescriptionAttribute的值進行替換,在產生package之前,一定要記得先編譯項目,否則會提示$description$找不到的錯誤;2、releaseNotes如果沒有,就直接刪掉這個節點,如果有,則填入自己的內容,不要使用默認內容,否則會在下一步產生警告信息。
STEP 6:產生類庫包
同樣在DaxnetNugetTest.csproj路徑下,使用下面的命令產生NuGet類庫包:
nuget pack DaxnetNugetTest.csproj
成功后,提示:
注意:由於我們的項目通過NuGet引用了Castle.Core,因此,它將會作為一個依賴組件(dependency)打包到產生的nupkg文件中。
另外,NuGet會使用默認的項目配置所產生的程序集進行打包。如果項目默認是Debug,而你需要用Release打包,則使用下面的命令:
nuget pack DaxnetNugetTest.csproj -Prop Configuration=Release
STEP 7:發布類庫包
現在,通過以下命令發布類庫包:
nuget push DaxnetNugetTest.1.0.0.0.nupkg
完成以后,出現以下提示:
如果要發布到自己的nuget服務器,使用NuGet Package Explorer打開nupkg包,
STEP 8:測試已發布的類庫包
新建一個控制台應用程序,在項目上點右鍵,選擇Manage NuGet Packages,在搜索框中輸入DaxnetNugetTest,此時我們發布的Package已經可以顯示了:
單擊Install按鈕,NuGet會自動分析組件依賴關系,然后把所需要的所有程序集都下載下來並添加到項目引用中:
寫一點代碼來測試:
class Program { static void Main(string[] args) { var pair = DaxnetNugetTest.CastleHelper.GetIntPair(); Console.WriteLine(pair.First); Console.WriteLine(pair.Second); } }
輸出如下:
STEP 9:更新類庫包
隨着類庫開發進度不斷向前,必然會有版本更新。更新類庫包很簡單,只需要在AssemblyInfo.cs中更新一下版本號,然后重新執行上面的STEP 6、7即可。注意在執行STEP 7的時候,nupkg的文件名應該使用新版本的文件名。
現在,我們重新打開DaxnetNugetTest項目,將CastleHelper類中的20,30改為40,50,然后打開AssemblyInfo.cs,版本號升級為2.0.0.0,重新編譯項目,並重新產生、發布nupkg:
再打開用來測試的控制台程序,同樣打開Manage NuGet Packages對話框,我們可以在Updates中看到,DaxnetNugetTest有了更新:
點擊Update按鈕,將類庫更新到最新版本。重新運行這個控制台程序,我們發現,輸出已經是最新版本的值了:
STEP 10:刪除已發布的包
原則上,NuGet不允許用戶刪除已發布的包,而只能將其設置為不顯示在Manage NuGet Packages的列表中。打開www.nuget.org,用已注冊的賬戶登錄后,可以在My Account頁面選擇Manage My Packages鏈接進入管理頁面:
進入后,可以看到我們已發布的Packages:
點擊DaxnetNugetTest左邊的小垃圾桶圖標,即可進入Listing頁面,頁面中我們也能看到“Permanently deleting packages is not supported”的提示。要將Package從Package List中移除,只需要去掉List DaxnetNugetTest 2.0.0.0 in search results選項前面的鈎鈎,然后單擊Save按鈕保存即可:
原文:http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html
相關文章推薦:
發布你的程序包到Nuget( 推薦,非常快速,打包、上傳)
https://www.cnblogs.com/stulzq/p/8874426.html
自己搭建nuget服務器
http://www.cnblogs.com/xcsn/p/4516131.html