NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了NuGet 工具, 有了它,管理项目中的第三方库变得异常简单和便捷。

 NuGet 提供用户两种交互方式, 一是用户界面, 二是powershell命令行. 从vs的工具->包管理器 我们可以看到这两个选项

 NuGet用户界面

NuGet命令行

 下面主要介绍命令行的使用:

  •  Get-Help nuget  , 打印NuGet包含的命令, 比如获得项目中引用的库文件Get-Package, 安装,卸载,更新库 Install/Uninstall/Update-Package等
PM> Get-Help nuget
TOPIC
    about_NuGet
    
SHORT DESCRIPTION
    Provides information about NuGet Package Manager commands.
           
LONG DESCRIPTION
    This topic describes the NuGet Package Manager commands. NuGet is an integrated package 
    management tool for adding libraries and tools to .NET projects.

                 
    The following NuGet cmdlets are included.

        Cmdlet					Description
        ------------------		----------------------------------------------
        Get-Package				Gets the set of installed packages.  With -ListAvailable, 
                                gets the set of packages available from the package source.

        Install-Package			Installs a package and its dependencies into the project.

        Uninstall-Package		Uninstalls a package. If other packages depend on this package, 
                                the command will fail unless the –Force option is specified.

        Update-Package			Updates a package and its dependencies to a newer version.

        Add-BindingRedirect		Examines all assemblies within the output path for a project
                                and adds binding redirects to the application (or web) 
                                configuration file where necessary.
                            
        Get-Project				Returns a reference to the DTE (Development Tools Environment) 
                                for the specified project. If none is specifed, returns the 
                                default project selected in the Package Manager Console.

        Open-PackagePage        Open the browser pointing to ProjectUrl, LicenseUrl or 
                                ReportAbuseUrl of the specified package.

        Register-TabExpansion	Registers a tab expansion for the parameters of a command.

SEE ALSO
    Online documentation: http://go.microsoft.com/fwlink/?LinkID=206619
    Get-Package
    Install-Package
    Uninstall-Package
    Update-Package
    Add-BindingRedirect
    Get-Project
    Open-PackagePage
    Register-TabExpansion
  • Get-Help ,打印命令帮助, 相当于linux bash的 man / get-help ,比如我们想看Get-Package 可以干嘛,输入get-help get-package ,输出如下:
PM> get-help get-package

NAME
    Get-Package
    
SYNOPSIS
    Gets the set of installed packages. Use the -ListAvailable flag to list packages available from the package source.
    
    
SYNTAX
    Get-Package -Source <string> [-ListAvailable] [-Updates] [-ProjectName <string>] [-Filter <string>] [-First <int>] [-Skip <in
    t>] [-AllVersions] [-IncludePrerelease] [<CommonParameters>]
    
    
DESCRIPTION
    Gets the set of installed packages. Use the -ListAvailable flag to list packages available from the package source.
    

RELATED LINKS
    Online version: http://docs.nuget.org/
    Get-Package 

REMARKS
    To see the examples, type: "get-help Get-Package -examples".
    For more information, type: "get-help Get-Package -detailed".
    For technical information, type: "get-help Get-Package -full".

  NuGet命令使用PowerShell, 所以对PowerShell熟悉的同学可以很快上手使用。

  • Install-Package ,用于安装包 , 比如我们想在名称为MvcApp的 asp.net mvc项目中引用jquery ,直接输入Install-Package jquery即可安装NuGet资源中最新版jquery , 当然我们也可以指定安装某个版本的jquery, 比如1.8.2 版jquery , 安装到MvcApp中
PM> Install-Package jquery -Version 1.8.2 -ProjectName MvcApp
'jQuery 1.8.2' already installed.
Adding 'jQuery 1.8.2' to MvcApp.
Successfully added 'jQuery 1.8.2' to MvcApp.

  安装好后,你去mvc项目的Scripts目录就可以看到添加的jquery引用(包括智能提示文件和min文件及未经压缩的文件),另外你可以看到packages.config文件里面新增了一条引用记录:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="DotNetOpenAuth.AspNet" version="4.1.4.12333" targetFramework="net45" />
  <package id="DotNetOpenAuth.Core" version="4.1.4.12333" targetFramework="net45" />
  <package id="DotNetOpenAuth.OAuth.Consumer" version="4.1.4.12333" targetFramework="net45" />
  <package id="DotNetOpenAuth.OAuth.Core" version="4.1.4.12333" targetFramework="net45" />
  <package id="DotNetOpenAuth.OpenId.Core" version="4.1.4.12333" targetFramework="net45" />
  <package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.1.4.12333" targetFramework="net45" />
  <package id="EntityFramework" version="5.0.0" targetFramework="net45"></package>
  <package id="jQuery" version="1.8.2" targetFramework="net45" />
  <package id="knockoutjs" version="2.2.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Mvc.FixedDisplayModes" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.Web.Optimization" version="1.0.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi" version="4.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Client" version="4.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.Core" version="4.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.OData" version="4.0.30506" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="4.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages.Data" version="2.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages.OAuth" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.AspNet.WebPages.WebData" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.Data.Edm" version="5.2.0" targetFramework="net45" />
  <package id="Microsoft.Data.OData" version="5.2.0" targetFramework="net45" />
  <package id="Microsoft.jQuery.Unobtrusive.Ajax" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.jQuery.Unobtrusive.Validation" version="2.0.30506.0" targetFramework="net45" />
  <package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net45" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
  <package id="Modernizr" version="2.6.2" targetFramework="net45" />
  <package id="Newtonsoft.Json" version="4.5.11" targetFramework="net45" />
  <package id="System.Spatial" version="5.2.0" targetFramework="net45" />
  <package id="WebGrease" version="1.3.0" targetFramework="net45" />
</packages>

 另外如果引用的包存在依赖, NuGet会包含下载所有的依赖文件。

  • Update-Package ,更新包, 比如我们要使用1.9版的jquery,如下
PM> Update-Package jquery -Version 1.9 -ProjectName MvcApp
Updating 'jQuery' from version '1.8.2' to '1.9.0' in project 'MvcApp'.
Removing 'jQuery 1.8.2' from MvcApp.
Successfully removed 'jQuery 1.8.2' from MvcApp.
Adding 'jQuery 1.9.0' to MvcApp.
Installing 'jQuery 1.9.0'.
Successfully installed 'jQuery 1.9.0'.
Successfully added 'jQuery 1.9.0' to MvcApp.
Uninstalling 'jQuery 1.8.2'.
Successfully uninstalled 'jQuery 1.8.2'.

  我们之前装的1.8.2被删除, 1.9.0版的jquery被引用, 同时packages.config文件也会更新。

  • Uninstall-Package ,卸载包, 比如我们不用jquery了, 删除之 (如果有其他包引用jquery ,那么应该先删除依赖jquery的包,不然会报错。)
PM> Uninstall-Package jQuery
Removing 'jQuery 1.9.0' from MvcApp.
Successfully removed 'jQuery 1.9.0' from MvcApp.
Uninstalling 'jQuery 1.9.0'.
Successfully uninstalled 'jQuery 1.9.0'.

  同样,packages.config会删除jquery记录。

  • Get-Package ,获得项目引用的包列表,或NuGet资源中心的包列表,比如获得MvcApp引用了那些包
PM> Get-Package -ProjectName MvcApp

Id                             Version              Description/Release Notes                                                                     
--                             -------              -------------------------                                                                     
DotNetOpenAuth.AspNet          4.1.4.12333          Enables web site visitors to log into an ASP.NET web application via popular identity provi...
DotNetOpenAuth.Core            4.1.4.12333          This package contains shared code for other NuGet packages, and contains no public API in a...
DotNetOpenAuth.OAuth.Consumer  4.1.4.12333          Improve usability, reliability, conversion rates and security simultaneously by simply aski...
DotNetOpenAuth.OAuth.Core      4.1.4.12333          This package contains shared code for other NuGet packages, and contains no public API in a...
DotNetOpenAuth.OpenId.Core     4.1.4.12333          This package contains shared code for other NuGet packages, and contains no public API in a...
DotNetOpenAuth.OpenId.Relyi... 4.1.4.12333          Increase conversion rates to your web site by lowering the bar to create an account with yo...
EntityFramework                5.0.0                Entity Framework is Microsoft's recommended data access technology for new applications.      
knockoutjs                     2.2.0                A JavaScript MVVM library to help you create rich, dynamic user interfaces with clean maint...
Microsoft.AspNet.Mvc           4.0.30506.0          This package contains the runtime assemblies for ASP.NET MVC. ASP.NET MVC gives you a power...
Microsoft.AspNet.Mvc.FixedD... 1.0.0                This package contains a workaround for a bug affecting mobile view caching in ASP.NET MVC 4...
Microsoft.AspNet.Razor         2.0.30506.0          This package contains the runtime assemblies for ASP.NET Web Pages. ASP.NET Web Pages and t...
Microsoft.AspNet.Web.Optimi... 1.0.0                ASP.NET Optimization introduces a way to bundle and optimize css/js files.                    
Microsoft.AspNet.WebApi        4.0.30506.0          This package contains everything you need to host ASP.NET Web API on IIS. ASP.NET Web API i...
Microsoft.AspNet.WebApi.Client 4.0.30506.0          This package adds support for formatting and content negotiation to System.Net.Http. It inc...
Microsoft.AspNet.WebApi.Core   4.0.30506.0          This package contains the core runtime assemblies for ASP.NET Web API. This package is used...
Microsoft.AspNet.WebApi.OData  4.0.30506            This package contains everything you need to create OData endpoints using ASP.NET Web API a...
Microsoft.AspNet.WebApi.Web... 4.0.30506.0          This package contains everything you need to host ASP.NET Web API on IIS. ASP.NET Web API i...
Microsoft.AspNet.WebPages      2.0.30506.0          This package contains core runtime assemblies shared between ASP.NET MVC and ASP.NET Web Pa...
Microsoft.AspNet.WebPages.Data 2.0.20710.0          This package contains the runtime assemblies for ASP.NET Web Pages. ASP.NET Web Pages and t...
Microsoft.AspNet.WebPages.O... 2.0.30506.0          This package contains the runtime assemblies for ASP.NET Web Pages. ASP.NET Web Pages and t...
Microsoft.AspNet.WebPages.W... 2.0.30506.0          This package contains the runtime assemblies for ASP.NET Web Pages. ASP.NET Web Pages and t...
Microsoft.Data.Edm             5.2.0                Classes to represent, construct, parse, serialize and validate entity data models. Targets ...
Microsoft.Data.OData           5.2.0                Classes to serialize, deserialize and validate OData payloads. Enables construction of ODat...
Microsoft.jQuery.Unobtrusiv... 2.0.30506.0          jQuery plugin that unobtrusively sets up jQuery.Validation.                                   
Microsoft.Net.Http             2.0.20710.0          This package provides a programming interface for modern HTTP applications. This package in...
Microsoft.Web.Infrastructure   1.0.0.0              This package contains the Microsoft.Web.Infrastructure assembly that lets you dynamically r...
Modernizr                      2.6.2                Modernizr adds classes to the <html> element which allow you to target specific browser fun...
Newtonsoft.Json                4.5.11               Json.NET is a popular high-performance JSON framework for .NET                                
System.Spatial                 5.2.0                Contains a number of classes and canonical methods that facilitate geography and geometry s...
WebGrease                      1.3.0                Web Grease is a suite of tools for optimizing javascript, css files and images.  

以上几个命令是NuGet管理包的几个常用命令,当然我们也可以选择在用户界面中进行相应操作,有兴趣探索更多命令和功能的同学可以参考NuGet官方网站 http://docs.nuget.org/。

总结: 

 有了NuGet, 包和包之间的依赖管理从此变得异常简单和便捷, 在团队开发中, 大家只用共享一份相同的packages.config 配置文件即可避免库引用错乱的局面。 我们甚至可以编写一小段powershell代码,为所有项目自动引用需要的包。

标签智能推荐:

Nuget快捷实践

Nuget快捷实践简介本文主要包含三个部分,即创建nuget包、上传nuget包和删除nuget包。旨在引导快速使用nuget打包和使用,并实现对于nuget的简单管理。本文使用的nuget服务是基于自行搭建的nugetserverv3.0.0.0。具体搭建方法可以参考nuget官方的指导教程。另外文章中还涉及到两个程序:NugetPackageExplorer:v4.1.38nuget.exe:

搭建nuget 服务器

搭建nuget服务器,这是上家公司进行类库管理的方式,其实优点很明显,1.代码保密2.代码重复利用效率高,这样不管任何项目只要知道nuget服务器地址就能直接调用3.可进行版本任意切换提高代码差异性管理1.部署nuget服务器因为我们的项目使用的是netcore,所以自己直接也是建立的netcore项目,但是发现nugetserver不管是nugetserver还是nugetservercore对

关于基于Nexus3和Docker搭建私有Nuget服务的探索

://localhost:8081/repository/nuget-hosted/通过访问链接可查到到已经推送成功http://localhost:8081/repository/nuget-hosted/nuget使用打开VisualStudio,右键项目,选择管理Nuget程序包,在进入Nuget包管理界面右上角的设置页面。将前面的源地址添加进来,比如:http://localhost:80

NuGet

什么是NuGet?类似与Java的Maven;它就是一个包(package)的管理平台,是.Net平台包的管理工具,类似于应用商店;NuGet官网NuGetGallery|Home使用NuGet使用NuGet的的使用方式.NetCoreSDK中的NuGet命令行VS中的NuGet图形界面工具NuGet.exe命令行客户端VS图形界面使用NuGet工具-NuGet包管理-管理解决方案NuGet包程序

10分钟学会Visual Studio将自己创建的打包到NuGet进行引用(net,net core,C#)

nuget包从创建,上传到被使用的流程对于引用大家都会使用,但是对于创建NuGet引用就不怎么会了,我们下面就介绍怎么打包dll类库到NuGet平台进行引用。创建类库方法我们首先创建一个可调用的类库,以“繁简体相互转换”为例,当然你也可以创建其他的,比如获取配置文件、http请求帮助类等。这里使用的环境是vs2019,.NETCore2.1,使用.NET也可以,这里可根据自己的使用环境创建。注意:

Microsoft.Bcl.Async 使用总结--在.NET Framework 4.5项目使用.NET Framework 4.5版本及以上版本才可以使用C# 5中的async/await异步特性

才可以使用,那如果想在.NETFramework4使用C#5中的异步特性怎么办呢?还好有一个开源的类库可以使用--Microsoft.Bcl.Async包,一般引用这个的类库的话,需要同时引用Microsoft.Bcl.Async包的三个库组成:Microsoft.Bcl、Microsoft.Bcl.Async和Microsoft.Bcl.Build。具体使用如下:选择项目-右键管理NuGet程序

【VS】NuGet 修改包路径

;如果NuGet.Config不存在,也可以在C:\ProgramFiles(x86)\NuGet\Config目录下新建一个NuGet.Config,将该文件夹中的Microsoft.VisualStudio.Offline.config文件的内容复制到新建的NuGet.Config中,再在其中添加上述的节点。修改项目中的包路径安装包时,NuGet会先搜索全局包管理目录,如果需要安装的包已经存在

.net 温故知新:【4】NuGet简介和使用

在包管理以前我们在项目中引用第三方包通常是去下载dll放到项目中再引用,后来逐渐发展成各种包管理工具,nuget就是一种工具,适用于任何现代开发平台的基本工具可充当一种机制,通过这种机制,开发人员可以创建、共享和使用有用的代码。通常,此类代码捆绑到“包”中,其中包含编译的代码(如DLL)以及在使用这些包的项目中所需的其他内容。Linux我们可以使用apt、yum来安装软件,js可以使用npm来搭建

Paket 介绍

tml),它本质上是Nuget之外的另一种方式管理.NET项目。问题来了,为什么要替换NuGet?Paket是一个用于.NET和Mono平台的包管理器,灵感来自于Bundler。可与NuGet一起工作,可精确控制项目中所引用的各种软件包。所以可以肯定的是你想知道,"为什么我们需要更换掉NuGet?"Packet本质上是只需要NuGet的最基本的功能,并增加了一些额外的并且是不错的功能。一方面,Pa

使用dotnet Cli向nuget发布包

ETCore库项目。构建时生成Nuget包:顾名思义,除打包命令,构建时也会自动生成nuget包;标记:帮助其他人定位你的包,了解包的能力。给package设定一个唯一id,并填写其他属性。注意这个packageid需要在nuget.org全站唯一,我们建议你使用包前缀名来避免重复,比如:${UserName}.PackageName打包将配置改为Release右键项目--&gt;打包如果你没有看