當前位置:編程學習大全網 - 源碼下載 - 如何使用nuget命令發布壹個測試版本的package

如何使用nuget命令發布壹個測試版本的package

使用NuGet發布自己的類庫包(Library Package)

NuGet是壹個為大家所熟知的Visual Studio擴展,通過這個擴展,開發人員可以非常方便地在Visual Studio中安裝或更新項目中所需要的第三方組件,同時也可以通過NuGet來安裝壹些Visual Studio的插件等。作為壹名開發人員,您可能也會開發壹些公***組件以供他人使用,本文將壹步步介紹如何以最簡單的方式將自己所開發的類庫包發布到nuget上,以供更多的人使用。

背景

如果妳還是不知道什麽是NuGet,那麽就看這樣壹個案例:我現在需要在我的項目中引用Castle.Core程序集,按照以往的做法,就是從Castle Projects官方網站,下載壹個最新版本的dll,然後把它復制到項目的lib目錄下(或者隨便什麽地方都行),這樣做不僅繁瑣,而且妳需要時刻關心官網上這個程序集的最新版本信息(當然或許妳也不會去關註),更煩的是,如果妳是壹個開源項目的Contributor,妳還需要花壹定的時間去管理所有的這些libs,不僅如此,如果妳是使用的源代碼管理系統來管理項目源碼,比如使用git等,那妳還不得不把這些libs上傳到源代碼管理系統中,否則團隊中的其他組員即使獲得了源代碼,也無法正確編譯。但這樣做又大大增加了源代碼的存儲空間,使得代碼克隆和下載都變得非常耗時。

現在,就可以直接使用NuGet來解決所有問題,我們先創建壹個Class Library,命名為DaxnetNugetTest,然後在這個項目上點右鍵,選擇Manage NuGet Packages:

在彈出的對話框中,搜索Castle關鍵字,然後在搜索結果列表中選擇Castle.Core,單擊Install按鈕:

安裝完成後,Castle.Core的程序集就被引用到項目中了,同時在項目中多出了壹個packages.config文件,以向NuGet表明,當前項目使用了哪些Package,版本是什麽,以及是基於哪個版本的.NET Framework。

今後,如果Castle.Core程序集有版本更新,則同樣可以使用Manage NuGet Packages菜單打開上面的對話框,然後在左邊的Updates列表中,就會列出發生了版本更新的Package,如果有,則單擊Update按鈕即可更新。

更有趣的是,如果妳在解決方案上點右鍵,選擇Enable NuGet Package Restore菜單,那麽在妳編譯項目的時候,NuGet會自動分析出妳項目所依賴的第三方組件,然後在編譯開始之前會自動上網下載所需的版本,因此,妳也就不要去維護這些libs了,更沒必要把這些libs也上傳到源代碼管理系統中。

不過這些也都不是本文的重點,本文的重點是,介紹如何將自己的Class Library發布到NuGet上。

發布自己的類庫包(Library Package)

STEP 1:在NuGet上註冊並獲取API Key

首先,妳需要到NuGet上註冊壹個新的賬號,然後在My Account頁面,獲取壹個API Key,這個過程很簡單,我就不作說明了。

STEP 2:下載NuGet.exe

NuGet有個命令行工具:NuGet.exe,非常好用,不過使用之前需要下載,下載地址:。為了方便使用,請設置機器的PATH環境變量,將NuGet.exe的路徑添加到PATH中。

STEP 3:設置API Key

使用以下命令設置NuGet API Key:

1

nuget setApiKey <my_api_key>

記得將上面的my_api_key替換為STEP 1中獲得的API Key。

STEP 4:開發自己的類庫(Class Library)

上面我們新建了壹個類庫:DaxnetNugetTest,並通過NuGet添加了對Castle.Core的引用,現在我們添加壹些代碼,來使用Castle.Core所提供的壹些功能。我們將Class1.cs改名為CastleHelper.cs,此時也會將Class1類改名為CastleHelper。在CastleHelper.cs中寫入以下代碼:

1

2

3

4

5

6

7

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版本:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[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文件如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?xml version="1.0"?>

<package >

<metadata>

<id>$id$</id>

<version>$version$</version>

<title>$title$</title>

<authors>$author$</authors>

<owners>$author$</owners>

<licenseUrl></licenseUrl>

<projectUrl></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:產生類庫包(Library Package)

同樣在DaxnetNugetTest.csproj路徑下,使用下面的命令產生NuGet類庫包:

1

nuget pack DaxnetNugetTest.csproj

成功後,提示:

註意:由於我們的項目通過NuGet引用了Castle.Core,因此,它將會作為壹個依賴組件(dependency)打包到產生的nupkg文件中。

另外,NuGet會使用默認的項目配置所產生的程序集進行打包。如果項目默認是Debug,而妳需要用Release打包,則使用下面的命令:

1

nuget pack DaxnetNugetTest.csproj -Prop Configuration=Release

STEP 7:發布類庫包

現在,通過以下命令發布類庫包:

1

nuget push DaxnetNugetTest.1.0.0.0.nupkg

完成以後,出現以下提示:

STEP 8:測試已發布的類庫包

新建壹個控制臺應用程序,在項目上點右鍵,選擇Manage NuGet Packages,在搜索框中輸入DaxnetNugetTest,此時我們發布的Package已經可以顯示了:

單擊Install按鈕,NuGet會自動分析組件依賴關系,然後把所需要的所有程序集都下載下來並添加到項目引用中:

寫壹點代碼來測試:

1

2

3

4

5

6

7

8

9

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的列表中。打開,用已註冊的賬戶登錄後,可以在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按鈕保存即可:

總結

本文簡要介紹了NuGet的使用,並介紹了壹種將自己開發的類庫以NuGet Package的方式發布到NuGet服務器的簡單方法。NuGet功能非常強大,有興趣的朋友可以上進行學習研究。

  • 上一篇:DIZ論壇系統源代碼
  • 下一篇:網站源碼怎麽預覽網站源碼怎麽預覽圖片
  • copyright 2024編程學習大全網