发布自己的类库到NuGet

  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服务器

http://www.cnblogs.com/xcsn/p/4516131.html

 

时间: 2024-10-12 19:18:35

发布自己的类库到NuGet的相关文章

发布开源前端类库 KISSY 1.1.0

是否还记得,去年 10 月份的 美女与汽车 ? 眨眼近一年时光,KISSY 已经从一个开源编辑器的代号,演化成一个开源前端类库的名称. 愿景 KISSY 的愿景是:打造一个小巧灵活.简洁实用.使用起来让人感觉愉悦的前端 UI 类库. 源码 KISSY 基于 MIT 协议,完全开源.目前在 github 上管理:kissy@github 欢迎 fork! 欢迎 pull request! 我们相信,开源能让 KISSY 走向卓越. 文档 KISSY 的文档地址也在 github 上:docs 目前

Rudiments 0.33发布 一个C++类库

Rudiments一个C++++类库提供诸如守护进程,客户端和服务器,以及标准C正则表达式,信号和信号处理功能. Rudiments 0.33主要修正了一个错误,清理和优化发行版.增加了一些小的功能. 下载地址:http://prdownloads.sourceforge.net/rudiments/rudiments-0.33.tar.gz?download

The Two-Layered GUI Toolkit 0.1.7发布 GUI辅助类库

The Two-Layered GUI Toolkit是一个GUI辅助类库,用于简化单独可互换的http://www.aliyun.com/zixun/aggregation/6980.html">前端开发.对于每个支持的对话框类型,有一个设置类的选项,可用于实现一个特定的GUI工具包.也就是说,对话框定义可以编写应用程序的核心组件,并传送给前端,用它来实例化对话框. The Two-Layered GUI Toolkit 0.1.7版本包含了GTK#绑定的一些错误修正,增加了一个易于使用

POCO C++ Libraries 1.4.2发布 C++应用类库

POC++O C++ Libraries是一款用于开发以网络为中心和便携式C++应用的类库集合.这些类结合C++标准库和替代功能,包括:线程,线程同步,访问文件系统,数据流,共享库和类加载,sockets和网络协议(HTTP,FTP,SMTP,等等),HTTP服务器,一个XML解析器的SAX2,DOM接口和SQL数据库访问. POCO C++ Libraries 1.4.2版本修复了多个错误和一些功能的改善,包括更好的支持网络库的http://www.aliyun.com/zixun/aggre

c++-gtk-utils 2.0.9发布 轻量级C++类库

c++-gtk-utils 是一个轻量级的C++++类库,使用POSIX环境中的C++程序,包含GTK++ 编程的大量的类和函数.它提供了管理GTK+构件和窗口的类,这将使GTK+异常安全.包括的类有:内5636.html">存管理的智能指针类,自动切断的线程安全signal/slot类,Unix文件描述符的打开文件类,pthread的封装类,等等. c++-gtk-utils 2.0.9该版本C++11 lambda表达式的回调对象的集成得到了改善.AsyncQueueDispatch赋

c++-gtk-utils 2.0.8发布 轻量级C++类库

c++-gtk-utils 是一个轻量级的C++++类库,使用POSIX环境中的C++程序,包含GTK++ 编程的大量的类和函数.它提供了管理GTK+构件和窗口的类,这将使GTK+异常安全.包括的类有:内5636.html">存管理的智能指针类,自动切断的线程安全signal/slot类,Unix文件描述符的打开文件类,pthread的封装类,等等. c++-gtk-utils 2.0.8该版本改善了库中的线程支持,包括提供一个新的Cgu::AsyncResult类. 软件信息:http:

c++-gtk-utils 2.0.7发布 轻量级C++类库

c++-gtk-utils 是一个轻量级的C++++类库,使用POSIX环境中的C++程序,包含GTK++ 编程的大量的类和函数.它提供了管理GTK+构件和窗口的类,这将使GTK+异常安全.包括的类有:内存管理的智能指针类,自动切断的线程安全signal/slot类,Unix文件描述符的打开文件类,pthread的封装类,等等. c++-gtk-utils 2.0.7该版本gcc-4.7编译已得到修复.单元测试和文档已得到改善. 软件信息:http://cxx-gtk-utils.sourcef

c++-gtk-utils 1.2.16发布 轻量级C++类库

c++-gtk-utils是一个轻量级的C++++类库,使用POSIX环境中的C++程序,包含GTK++ 编程的大量的类和函数.它提供了管理GTK+构件和窗口的类,这将使GTK+异常安全.包括的类有:内5636.html">存管理的智能指针类,自动切断的线程安全signal/slot类,Unix文件描述符的打开文件类,pthread的封装类,等等. c++-gtk-utils 1.2.16版本改进了处理结果的主循环异步. 软件信息:http://cxx-gtk-utils.sourcefo

Nuget如何管理本地的包

1.在nuget中创建一个本地的程序包源   2. 制作我们本地的包  使用nuget package explorer制作我们本地的包 下载地址:http://npe.codeplex.com/releases/view/68211 详细步骤: 点击创建选项 点击编辑 编写信息和添加dll,然后点击左上角的打钩保存 ctrl +s 保存文件 再次打开Nuget管理器,看到了有木有  名称和刚才不一样,是因为和log4net重复了,重新修改了下   相关文章推荐: 发布自己的类库到nuget h