前言

什么是NuGet?

Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。

为什么要使用NuGet

如果我们项目开发不需要引用任何第三方库包或者我们自己的公共库包,那么使用NuGet毫无作用,但是实际情况恰恰相反,任何项目都需要记录日志,最好的情况是我们有一个公共的日志模块,任何老项目或新项目我们可以引用它,就无需再做开发。就那我们自己的项目来说,FC,FGOnline,FGMain,FGClient,FGServer,目前我们没有一个公共的日志模块,底层使用Kernal及其他库包可能也不是一个版本,即使是同一个版本我们开发上都是将dll手工拷来拷去。在新项目上来说这增大了工作量和开发量,因此我们需要一个库包管理机制来管理我们私有库包和我们需要使用的第三方库包。

NuGet的优点

AsyncModule.NetMQ.dll举例,AsyncModule.NetMQ.dll依赖NetMQ.dll,而NetMQ.dll又依赖AsyncIO.dll

目前我们需要数据库连接的地方我们需要引用AsyncModule.NetMQ.dll,我们可能会把它手工烤到我们需要的项目中,但是由于AsyncModule.NetMQ.dll需要依赖NetMQ.dll,因此我们还需要手工把NetMQ.dll拷到我们的项目中,同时由于NetMQ.dll需要依赖AsyncIO.dll,因此我们还需要手工把AsyncIO.dll拷到我们的项目中。依赖这当中就会有些问题,比如我们忘记拷了,或者我们拷的版本不是我们当前需要的,就会导致很多问题。

NuGet就可以让我们避免这个问题。若我们需要的库包已经导入到我们库包服务器中,那么我们只需要一条语句就可以引用该dll,同时NuGet会自动将其依赖包一起引用到我们的项目中,这完全是自动的。

使用

在VS中找到 Package Manager Console对话框

若界面上没有找到,则从工具-NuGet Package Manager下找

Get-Help NuGet

使用Get-Help NuGet命令查看帮助

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

Install-Package

使用Install-Package安装库包,安装时会自动安装当前Framework知道的库包及依赖包,若不支持则会提示错误。

PM> Install-Package AsyncModule.NetMQ
Attempting to resolve dependency 'NetMQ (≥ 4.0.0.1)'.
Attempting to resolve dependency 'AsyncIO (≥ 0.1.26)'.
Installing 'AsyncIO 0.1.26.0'.
Successfully installed 'AsyncIO 0.1.26.0'.
Installing 'NetMQ 4.0.0.1'.
Successfully installed 'NetMQ 4.0.0.1'.
Installing 'AsyncModule.NetMQ 1.1.0'.
Successfully installed 'AsyncModule.NetMQ 1.1.0'.
Adding 'AsyncIO 0.1.26.0' to NuGet.Client.
Successfully added 'AsyncIO 0.1.26.0' to NuGet.Client.
Adding 'NetMQ 4.0.0.1' to NuGet.Client.
Successfully added 'NetMQ 4.0.0.1' to NuGet.Client.
Adding 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.
Successfully added 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.

安装的时候注意对应的库包源

Get-Package

使用Get-Package安装库包

PM> Get-Package

Id                             Version              Description/Release Notes
-- ------- -------------------------
AsyncIO 0.1.26.0 AsyncIO
AsyncModule.NetMQ 1.1.0 基于NetMQ的异步Socket框架
NetMQ 4.0.0.1 A 100% native C# port of the lightweight high performance messaging library ZeroMQ

Uninstall-Package

使用Uninstall-Package卸载已安装的库包,依赖包不会自动卸载,有需要则需要手工卸载依赖包

PM> Uninstall-Package AsyncModule.NetMQ
Removing 'AsyncModule.NetMQ 1.1.0' from NuGet.Client.
Successfully removed 'AsyncModule.NetMQ 1.1.0' from NuGet.Client.
Uninstalling 'AsyncModule.NetMQ 1.1.0'.
Successfully uninstalled 'AsyncModule.NetMQ 1.1.0'.

若库包有多个版本则在库包后面加上-Version 版本号参数安装指定版本的库包。若依赖包指定版本已经安装则不会重复重新安装。

PM> Install-Package AsyncModule.NetMQ -Version 1.1.0
Attempting to resolve dependency 'NetMQ (≥ 4.0.0.1)'.
Attempting to resolve dependency 'AsyncIO (≥ 0.1.26)'.
Installing 'AsyncModule.NetMQ 1.1.0'.
Successfully installed 'AsyncModule.NetMQ 1.1.0'.
Adding 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.
Successfully added 'AsyncModule.NetMQ 1.1.0' to NuGet.Client.

当然也可以使用图形界面找到上图中的Manager NuGet Package For Solution...打开图形界面,在需要安装的库包右侧点击安装,和输入命令是一样的。

界面左侧列表包含已安装库包,在线,更新等筛选,在线里面根据数据源分类。中间则是当前数据源库包列表,右侧则是搜索栏和选中库包的详细信息。

当安装了依赖包我们可以在项目根目录找到packages.config文件,会记录我们安装的库包及版本信息

同时在我们的项目文件夹下会有个packages的文件夹用于保存我们下载下来的库包

制作NuGet库包

若我们需要上传我们的dll到NuGet服务器中,首先需要让我们VS编译时能导出NuGet所支持的.nupkg文件

在解决方案上面右击找到Enable NuGet Package Restore点击开启功能



开启后我们需要手动在项目的.csproj文件中在PropertyGroup下加入以下节点

    <BuildPackage>true</BuildPackage>
<RestorePackages>true</RestorePackages>



同时在Project节点内增加以下内容

<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
</Target>

再次编译项目就会自动编译出.nupkg文件。

如果是.Net Standard 项目直接在程序右键打包即可打包。

搭建NuGet服务器

新建一个项目





这里使用3.0版本的NuGet.Server,需要.Net Framework 4.6支持。

然后引用NuGet.Server库包

PM> Install-Package NuGet.Server

安装完成后,编译启动即可,就是这么简单,然后托管到IIS上。



上传库包的时候可能需要apikey,需要在web.config中设置。

上传NetGet库包

编译出NuGet我们需要将包上传到NuGet服务器中,这样我们才能在VS中从NuGet服务器中下载下来。这里我使用NuGet Package Explorer工具进行上传,官方支持Win10商店和使用Chocolatey下载。

若需要上传到NuGet官方服务器中可以在NuGet官网上传,但是我们一般需要上传到指定NuGet服务器上,如我们自己的NuGet服务器。



选择第一项找到本地的.nupkg文件





左侧可以编译一下信息,





当上传了多个版本的dll,NuGet.Server会根据包Id和Version进行分组

在输入命令的时候可以用TAB键智能提示出当前所有版本号

我们也可用通过命令上传

nuget.exe push {package file} {apikey} -Source http://www.jnuget.com:10080/nuget

当我们同一个包上传过同一个版本的时候再次上传会报错,我们需要删除NuGet.Server已存在的包,后才能再次上传。或者我们可以允许通过包同一个版本允许覆盖上传,将web.ConfigallowOverrideExistingPackageOnPush配置改为true即可

新增NuGet源

在Tools-Options-NuGet Package Manager-Package Sources可以增加数据源



点击右上角的加号新增,输入完地址后点一下更新即可。

总结

通过此片文章讲解了如何使用、部署NuGet,如何编译生成,上传库包到NuGet。




微信扫一扫二维码关注订阅号杰哥技术分享

本文地址:https://www.cnblogs.com/Jack-Blog/p/7890369.html

作者博客:杰哥很忙

欢迎转载,请在明显位置给出出处及链接

NuGet的使用、部署、搭建私有服务的更多相关文章

  1. 搭建私有 Nuget 服务器教程(1)

    对于 .NET 开发者来说,nuget 是必不可少的程序包管理工具.相应地,大部分开发团队都需要在内部搭建 Nuget 服务器,以管理私有 nupkg 包.本教程所使用的 Nuget 服务器,不是微软 ...

  2. AntShares区块链的节点部署与搭建私有链

    近期陆续体验常见的区块链开源项目,比如小蚁OnChain出的AntShares.AntShares跟其它开源区块链项目不一样,他们家是使用C#开发,基于.NET Core执行在Linux,期待未来出G ...

  3. 使用BaGet 搭建私有nuget 服务器

    使用BaGet 搭建私有nuget 服务器 netNugetBaGet 引言 为了增强代码的安全性和企业团队开发的高效性,搭建私有的package 包管理服务器是很有必要的,搭建私有的类库管理服务有以 ...

  4. NET Core:搭建私有Nuget服务器以及打包发布Nuget包

    docker 安装 https://www.cnblogs.com/liuxiaoji/p/11014329.html 1.使用docker搭建私有Nuget服务器 docker run -d -p ...

  5. 基于CentOS搭建私有云服务

    系统版本:CentOS 7.2 64 位操作系统 部署 XAMPP 服务 下载 XAMPP(XAMPP 是个集成了多个组件的开发环境,包括 Apache + MariaDB + PHP + Perl. ...

  6. 搭建私有Nuget仓库

    使用Nexus搭建私有Nuget仓库 https://www.cnblogs.com/Erik_Xu/p/9211471.html 前言 Nuget是ASP .NET Gallery的一员,是免费.开 ...

  7. Android业务组件化之Gradle和Sonatype Nexus搭建私有maven仓库

    前言: 公司的业务组件化推进的已经差不多三四个月的时间了,各个业务组件之间的解耦工作已经基本完成,各个业务组件以module的形式存在项目中,然后项目依赖本地的module,多少有点不太利于项目的并行 ...

  8. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  9. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

随机推荐

  1. ABAP 开启制定路径下的文件或网址URL

    REPORT ZTEST001. CALL FUNCTION 'CALL_INTERNET_ADRESS' EXPORTING PI_ADRESS = * PI_TECHKEY = EXCEPTION ...

  2. 阿里巴巴Java规约插件试用

    阿里Java开发规约Eclipse插件介绍 阿里巴巴集团配合<阿里巴巴Java开发手册>PDF终极版开发的IDE插件,目前包括IDEA插件.Eclipse插件. 安装 检查环境 插件要求: ...

  3. Selenium 设置浏览器下载 Firefox 和Chrome

    当我们在使用Selenium运行自动化测试时,偶尔需要用到下载功能,但浏览器的下载可能会弹出下载窗口,或者下载路径不是我们想要保存的位置,所以在通过Selenium启动浏览器时需要做相关的设置,将使这 ...

  4. win10 sdk 是否向下兼容

    向下兼容(downward compatibility),又称向后兼容(backward compatibility).回溯兼容,在计算机中指在一个程序.库或硬件更新到较新版本后,用旧版本程序创建的文 ...

  5. win10 uwp 保存用户选择文件夹

    如果我们每次把临时处理的文件保存,都要让用户选择一次,用户会不会觉得uwp垃圾?如果我们每次打开应用,都从某个文件读取,而这个文件不在应用目录和已知的目录,那么每次都需要用户选择,用户会不会觉得uwp ...

  6. mongdb单节点安装方法

    mongo单节点环境安装(linux) 安装包 下载地址: (https://www.mongodb.com/download-center) 用户权限/目录 创建 dbuser用户 groupadd ...

  7. OpenWRT(RT5350) 路由客户模式(Routed Client) ,设置防火墙开放UDP指定端口

    /* *功     能: 本文主要功能是设置OpenWRT(RT5350) 系统实现路由客户模式,无线连接上级路由, * 无线释放AP客户端,实现伪装的中继(子网段与上级路由网段不同),同时更改防火墙 ...

  8. C语言第一次实验报告

    一.实验题目,设计思路,实现方法 7-7 计算火车运行时间(15 分) 4-5 求简单交错序列前N项和(15 分) 4-2-7 装睡(10 分) 思路:7-7须将时间统一单位,化为以分钟计算再将两者相 ...

  9. admin的基础配置

    admin自定义配置 一.admin.py 我们知道在models.py文件中创建的数据表,一方面我们可以通过视图函数对其进行增删改查,一方面我们也可以通过admin进行,通常我们是通过admin的前 ...

  10. sql里的null和空的区别

    null表示为未知,未定义: 空表示为空白,或者0: sql查询,排序时null在''的前面: 定义字段为not null,写为空可以写入: null不可以用来比较,只能用is null判断: