手把手教你----使用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文件,把需要替换的信息替换掉,不需要的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>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>NuGetTest</description>
    <releaseNotes>releaseNotes</releaseNotes>
    <copyright>Copyright 2015</copyright>
  </metadata>
</package>

注意两点:1、$description$使用AssemblyDescriptionAttribute的值进行替换,在产生package之前,一定要记得先编译项目,否则会提示$description$找不到的错误;2、releaseNotes如果没有,就直接删掉这个节点,如果有,则填入自己的内容,不要使用默认内容,否则会在下一步产生警告信息。

STEP6:产生类库包(Library Package)

在NugetTest.csproj的路径下,使用下面的命令产生类库包:

nuget pack NuGetTest.csproj

运行结果:

STEP7:发布类库包

使用下面的命令:

nuget push NuGetTest.1.0.0.0.nupkg

运行时遇到点问题,正在调:

解决完之后,会更新到博客中。。。。。。

时间: 2024-10-08 10:09:19

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

手把手教你搭建nuget服务器

新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都行 此web项目将作为自己的NuGet服务器程序 我建的是MVC项目 安装NugetServer 工具栏—工具—NuGet包管理器—程序包管理器控制台 访问:https://www.nuget.org/packages/NuGet.Server/ 找到适合自己的版本,我这里选择的是最新的版本 执行命

手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行

新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都行,此web项目将作为自己的NuGet服务器程序 我建的是MVC项目 安装NugetServer 工具栏—工具—NuGet包管理器—程序包管理器控制台 访问:https://www.nuget.org/packages/NuGet.Server/ 找到适合自己的版本,我这里选择的是最新的版本 执行命

万字干货:手把手教你做需求管理

通过这篇文章,总结自己在工作实践中需求管理的方法论--普拉姆方法.总结这个方法论的特点是,用最轻量化的投入,与他人协作,并管理需求,推动需求上线.这套方法论组合了项目管理.敏捷开发的知识,希望能对大家有所帮助.本文适合0-2岁产品经理阅读,产品大牛.敏捷管理大师请绕过. 本文大纲如下: 1. 为什么要做需求管理? 1.1 我们的工作是否像救火 1.2 需求管理是什么? 1.3 宗旨是什么? 1.4 结尾 2. 需求管理中的干系人和角色 2.1 什么是干系人 2.2 需求管理中的角色 2.3 如何

手把手教你用ngrx管理Angular状态

本文将与你一起探讨如何用不可变数据储存的方式进行Angular应用的状态管理 :ngrx/store--Angular的响应式Redux.本文将会完成一个小型简单的Angular应用,最终代码可以在这里下载. Angular应用中的状态管理 近几年,大型复杂Angular/AngularJS项目的状态管理一直是个让人头疼的问题.在AngularJS(1.x版本)中,状态管理通常由服务,事件,$rootScope混合处理.在Angular中(2+版本),组件通信让状态管理变得清晰一些,但还是有点复

保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubernetes的云原生分布式块存储,易于部署和升级,100%开源且持久,由业界采用最为广泛的Kubernetes管理平台创建者Rancher Labs推出,并于去年10月捐献给CNCF.Longhorn的内置增量快照和备份功能可确保volume数据的安全,而其直观的UI可以方便地管理持久卷的计划备份.使用

UWP Jenkins + NuGet + MSBuild 手把手教你做自动UWP Build 和 App store包

背景 项目上需要做UWP的自动安装包,在以前的公司接触的是TFS来做自动build. 公司要求用Jenkins来做,别笑话我,之前还真不晓得这个东西. 会的同学请看一下支持错误,不会的同学请先自行脑补,我们一步一步的来. 首先我们准备2个安装包,Jenkins,NuGet 都下载最新的好了. 1. 安装Jenkins,下一步下一步.安装好了会自动浏览器跳转到http://localhost:8080/ 如下图 按照提示去C:\Program Files (x86)\Jenkins\secrets

手把手教你使用逻辑卷管理器:LVM

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 什么是LVM? LVM是逻辑卷管理器(Logical Volume Manger)的缩写,是一个管理磁盘的工具.LVM可以将多个磁盘或磁盘分区整合在一起,让这些磁盘或分区看起来就像是一个磁盘一样,LVM的主要优势在于可以灵活调整文件系统的容量.更详细的信息可以参考http://tldp.org/HOWTO/LVM-HOWTO/,下面将手把手教你使用LVM. 准备工作 为了更好的演示LVM实作流程

手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引

近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开发一个小型的b/s结构的管理系统,已达到帮助团队成员快速掌握b/s结构信息系统的开发方法. 源码位置:https://github.com/kamiba/FineUIDemo 源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com

手把手教你实现Spring ioc

手把手教你实现Spring ioc "Don't call us, we'll call you(不要联系我,我会主动联系你)" 这是好莱坞很经典的一句话,应用在ioc(控制反转)领域,发现理解起来相得益彰--你作为用户不需要控制业务实体的生成,交给我容器来控制,这就是控制反转.不过,这样理解起来也有点麻烦,套用面向对象大师Martin Fowler的说法更为贴切: "Dependency Inversion(依赖注入)" 当容器中所有的实体bean 都被管理起来的