首页 > 代码库 > 使用NuGet发布自己的类库包(Library Package)
使用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
完成以后,出现以下提示:
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发布自己的类库包(Library Package)