手把手教你----使用Nuget管理自己的项目库

什么是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的路径,并运行,然后输入下面的命令:

nuget setApiKey <my_api_key>

'''示例'''
nuget setApiKey 5fadcb82-ee54-4164-853a-7d924aa2e059

运行结果:

SETP4 开发自己的类库

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

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文件所在目录,然后执行:

nuget spec

运行结果:

用记事本打开NuGetTest.nuspec文件,注意里面的$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://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的路径下,使用下面的命令产生类库包:

nuget pack NuGetTest.csproj

运行结果:

STEP7 发布类库包

使用下面的命令:

nuget push NuGetTest.1.0.0.0.nupkg

运行时遇到点问题:

上面的这个问题,主要原因是因为API Key 一台电脑只能用一个。如果用第二个API Key在同一台电脑上发布另一个package的话就无法发布,就会报这个错。

下面是发布成功的内容:

STEP8 测试以及更新类库包

在解决方案中右键解决方案—-管理解决方案的NuGet程序包—-联机,输入自己的类库包名。安装就可以了。

然后是更新,更新的时候记得更改AssemblyInfo.cs中的版本号的信息,然后再重新运行一遍下面的cmd:

nuget pack *.csproj

nuget push *.nupkg

在打开测试程序,在更新中找到自己更新的包更新就可以了。

善于利用工具,提高我们的开发效率!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

ASP.NET MVC 5 - 创建连接字符串(Connection String)并使用SQL Server LocalDB

您创建的MovieDBContext类负责处理连接到数据库,并将Movie对象映射到数据库记录的任务中。你可能会问一个问题,如何指定它将连接到数据库? 实际上,...

36980
来自专栏Jackson0714

【解决方案】VS2013外部工具中添加ildasm.exe

34360
来自专栏技术博客

Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

  很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路。本文已同步到Web API2系列文章中http://www.cnblogs.com/ae...

10120
来自专栏青玉伏案

Notepad++使用小结

还是那句话“工欲善其事必先利其器”用Notepad++也有一段时间了,也积累了一些东西,写篇博文与大家分享一下使用Notepad++的一些心得。    简单的...

252100
来自专栏Ken的杂谈

ASP.NET Core 入门教程 2、使用ASP.NET Core MVC框架构建Web应用

ASP.NET Core 默认集成了DI。所有官方模块的引入都要使用DI的方式引入。

14220
来自专栏Flutter入门

Android adb无线调试脚本

使用adb的无线调试功能十分的方便。 但是实际工作中,总是要手动输入,十分麻烦。所以就把它写成脚本文件。

29020
来自专栏葡萄城控件技术团队

WPF的消息机制(一)- 让应用程序动起来

前言 谈起“消息机制”这个词,我们都会想到Windows的消息机制,系统将键盘鼠标的行为包装成一个Windows Message,然后系统主动将这些Window...

20290
来自专栏开发与安全

linux系统编程之信号(一):信号基本概述

一、为了理解信号,先从我们最熟悉的场景说起: 1. 用户输入命令,在Shell下启动一个前台进程。 2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断...

31780
来自专栏walterlv - 吕毅的博客

使用 Postman 调试 ASP.NET Core 开发的 API

发布于 2018-09-09 12:38 更新于 2018-09...

86730
来自专栏晓晨的专栏

ASP.NET Core 集成测试

16320

扫码关注云+社区

领取腾讯云代金券