NuGet的使用、部署、搭建私有服务

目录

  • 前言
    • 什么是NuGet?
    • 为什么要使用NuGet
    • NuGet的优点
  • 使用
    • Get-Help NuGet
    • Install-Package
    • Get-Package
    • Uninstall-Package
  • 制作NuGet库包
  • 搭建NuGet服务器
  • 上传NetGet库包
  • 新增NuGet源
  • 总结

前言

什么是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对话框
20171124103240-1

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

Get-Help NuGet

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

PM> Get-Help nuget
TOPICabout_NuGetSHORT DESCRIPTIONProvides information about NuGet Package Manager commands.LONG DESCRIPTIONThis 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 projectand 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 ALSOOnline documentation: http://go.microsoft.com/fwlink/?LinkID=206619Get-PackageInstall-PackageUninstall-PackageUpdate-PackageAdd-BindingRedirectGet-ProjectOpen-PackagePageRegister-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-PackageId                             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...打开图形界面,在需要安装的库包右侧点击安装,和输入命令是一样的。
20171124103850-3

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

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

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

制作NuGet库包

若我们需要上传我们的dll到NuGet服务器中,首先需要让我们VS编译时能导出NuGet所支持的.nupkg文件
在解决方案上面右击找到Enable NuGet Package Restore点击开启功能
20171124111344-8
开启后我们需要手动在项目的.csproj文件中在PropertyGroup下加入以下节点

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

2017112411257-9
同时在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>

21.png

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

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

搭建NuGet服务器

新建一个项目
20171124115849-10
20171124115856-11
这里使用3.0版本的NuGet.Server,需要.Net Framework 4.6支持。
然后引用NuGet.Server库包

PM> Install-Package NuGet.Server

安装完成后,编译启动即可,就是这么简单,然后托管到IIS上。
2017112412219-12
上传库包的时候可能需要apikey,需要在web.config中设置。

上传NetGet库包

编译出NuGet我们需要将包上传到NuGet服务器中,这样我们才能在VS中从NuGet服务器中下载下来。这里我使用NuGet Package Explorer工具进行上传,官方支持Win10商店和使用Chocolatey下载。
若需要上传到NuGet官方服务器中可以在NuGet官网上传,但是我们一般需要上传到指定NuGet服务器上,如我们自己的NuGet服务器。
2017112412320-13
选择第一项找到本地的.nupkg文件
2017112412435-14
2017112412514-15
左侧可以编译一下信息,
2017112412612-16
20171124134626-17
当上传了多个版本的dll,NuGet.Server会根据包Id和Version进行分组
20171124135034-18

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

我们也可用通过命令上传

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可以增加数据源
2017112414424-20
点击右上角的加号新增,输入完地址后点一下更新即可。

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

REVERSE-PRACTICE-BUUCTF-9

REVERSE-PRACTICE-BUUCTF-9[ACTF新生赛2020]usualCrypt[MRCTF2020]Transform[V&N2020 公开赛]CSRe[WUSTCTF2020]level1[ACTF新生赛2020]usualCrypt exe程序&#xff0c;运行后提示输入flag&#xff0c;无壳&#xff0c;ida分析 main函数逻辑清晰&#xff0c;获取输入&…

ASP.NET MVC Beta 新特性之 IValueProvider

在刚发布的ASP.NET MVC Beta版中&#xff0c;在UpdataModel方法中提供了一个带有IValueProvider参数的重载。那么这个IValueProvider有什么用呢&#xff1f; 我们先来看一个简单的场景&#xff0c;例如我们的blog系统有一个Post的对象&#xff0c;Post对象有一个Tags属性和Cat…

REVERSE-PRACTICE-BUUCTF-10

REVERSE-PRACTICE-BUUCTF-10[GWCTF 2019]xxor[HDCTF2019]Maze[WUSTCTF2020]level2[BJDCTF2020]BJD hamburger competition[GWCTF 2019]xxor elf文件&#xff0c;无壳&#xff0c;用ida分析 main函数的逻辑清晰&#xff0c;首先获取输入&#xff0c;为6个int64的值&#xff0c;…

Axure教程 axure新手入门基础(1)

axure新手入门基础(1) 名词解释&#xff1a; 线框图&#xff1a;一般就是指产品原型&#xff0c;比如&#xff1a;把线框图尽快画出来和把原型尽快做出来是一个意思。 axure元件&#xff1a;也叫axure组件或axure部件&#xff0c;系统自带了一部分最基础常用的&#xff0c;网上…

REVERSE-PRACTICE-BUUCTF-11

REVERSE-PRACTICE-BUUCTF-11[FlareOn4]IgniteMe[MRCTF2020]Xor[GKCTF2020]BabyDriver[MRCTF2020]hello_world_go[FlareOn4]IgniteMe exe程序&#xff0c;运行后提示输入flag&#xff0c;无壳&#xff0c;ida分析 主逻辑在start函数中&#xff0c;读取输入后check&#xff0c;验…

Axure教程 axure新手入门基础(2) 简单易上手

https://www.duote.com/tech/35/102713.html (二)Axure rp的线框图元件 l 图片 图片元件拖入编辑区后&#xff0c;可以通过双击选择本地磁盘中的图片&#xff0c;将图片载入到编辑区&#xff0c;axure会自动提示将大图片进行优化&#xff0c;以避免原型文件过大;选择图片时可以…

REVERSE-PRACTICE-BUUCTF-12

REVERSE-PRACTICE-BUUCTF-12[WUSTCTF2020]level3crackMe[FlareOn6]Overlong[WUSTCTF2020]Cr0ssfun[WUSTCTF2020]level3 elf文件&#xff0c;无壳&#xff0c;ida分析 main函数中&#xff0c;获取输入&#xff0c;对输入做base64编码&#xff0c;提示有错误&#xff0c;在程序中…

Axure RP使用基础教程

一、Axure界面介绍 1、页面导航面板&#xff08;Pages&#xff09; Axure的页面管理采用类似操作系统的文件夹和页面文件的管理方式&#xff0c;不同点是&#xff0c;页面文件可以存在子页面&#xff0c;这一点是考虑了页面与页面跳转或者嵌套页面等网页特点。 页面文件管理导…

REVERSE-PRACTICE-BUUCTF-13

REVERSE-PRACTICE-BUUCTF-13firmware[ACTF新生赛2020]Oruga[Zer0pts2020]easy strcmp[GXYCTF2019]simple CPPfirmware .bin&#xff08;二进制&#xff09;文件&#xff0c;由题目提示知是路由器固件逆向 参考&#xff1a;逆向路由器固件之解包 Part1 linux安装好binwalk和fir…

REVERSE-PRACTICE-BUUCTF-14

REVERSE-PRACTICE-BUUCTF-14[FlareOn3]Challenge1[GUET-CTF2019]number_game[GWCTF 2019]re3[网鼎杯 2020 青龙组]singal[FlareOn3]Challenge1 exe程序&#xff0c;运行后提示输入密码&#xff0c;输入错误退出程序&#xff0c;无壳&#xff0c;ida分析 main函数逻辑清晰&…

REVERSE-PRACTICE-BUUCTF-15

REVERSE-PRACTICE-BUUCTF-15[2019红帽杯]xx[ACTF新生赛2020]Universe_final_answer[WUSTCTF2020]level4findKey[2019红帽杯]xx exe程序&#xff0c;运行后直接输入&#xff0c;无壳&#xff0c;ida分析 交叉引用字符串“You win&#xff01;”来到sub_1400011A0函数 主要的逻辑…

【三层架构】——COM/DCOM初识

背景&#xff1a; 在学习三层架构的时候&#xff0c;知道三层分为UI层&#xff08;表现层&#xff09;、BLL层&#xff08;业务逻辑层&#xff09;、DAL层&#xff08;数据访问层&#xff09;&#xff0c;相对于传统的二层架构&#xff08;客户端和数据库&#xff09;来说&…

REVERSE-PRACTICE-BUUCTF-16

REVERSE-PRACTICE-BUUCTF-16[UTCTF2020]basic-reequation[安洵杯 2019]crackMe[FlareOn5]Minesweeper Championship Registration[UTCTF2020]basic-re elf文件&#xff0c;无壳&#xff0c;用ida分析 main函数就是简单的加减乘除运算 shiftF12&#xff0c;在字符串窗口看到fla…

IPC之命名管道

1.管道是通过IO接口存取得字节流&#xff0c; windows中利用得是ReadFile()和WriteFile(),windows利用单一句柄支持双向IO,命名管道也称做FIFO(first in first out) 命名管道得机制&#xff1a;一个进程把数据放到管道里&#xff0c;另一个知道管道名字得进程把数据把取走&…

REVERSE-PRACTICE-BUUCTF-17

REVERSE-PRACTICE-BUUCTF-17[网鼎杯 2020 青龙组]jocker[2019红帽杯]childRE[MRCTF2020]PixelShooter[ACTF新生赛2020]SoulLike[网鼎杯 2020 青龙组]jocker exe程序&#xff0c;运行后提示输入flag&#xff0c;无壳&#xff0c;用ida分析 main函数平衡栈后&#xff0c;F5反汇编…

Excluding Files From Team Foundation Version Control Using .tfignore Files

At one point I was coding on a hobby project, using Visual Studio Online for project management and source control. Because of the technologies involved, a large number of temporary files were being generated that I didn’t want checked in. Visual Studio’…

REVERSE-PRACTICE-BUUCTF-18

REVERSE-PRACTICE-BUUCTF-18[SWPU2019]ReverseMe[FlareOn1]Bob Doge[FlareOn5]Ultimate Minesweeper[GKCTF2020]Chellys identity[SWPU2019]ReverseMe exe程序&#xff0c;运行后提示输入flag&#xff0c;输入错误打印“Try again”&#xff0c;无壳&#xff0c;ida分析 交叉引…

VS2008中Web Reference和Service Reference的区别

很早就发现在vs2008中应用web service有两种方式&#xff0c;即Add Web Reference和Add Service Reference&#xff0c;但是一直不是很清楚这两者有什么区别。趁着今天有空实验一下这两者的区别并记录下来供大家参考。 首先在网上查找&#xff0c;发现有如下两个主要区别&#…

REVERSE-PRACTICE-BUUCTF-19

REVERSE-PRACTICE-BUUCTF-19[RoarCTF2019]polyre[安洵杯 2019]game[SCTF2019]Strange apk[CFI-CTF 2018]IntroToPE[RoarCTF2019]polyre elf文件&#xff0c;无壳&#xff0c;用ida分析 main函数的结构&#xff0c;多重循环&#xff0c;是控制流平坦化&#xff0c;参考&#xf…

REVERSE-PRACTICE-BUUCTF-20

REVERSE-PRACTICE-BUUCTF-20[SCTF2019]creakme[网鼎杯 2020 青龙组]bang[WUSTCTF2020]funnyreDig the way[SCTF2019]creakme exe程序&#xff0c;运行后提示输入ticket&#xff0c;无壳&#xff0c;用ida分析 交叉引用字符串“please input your ticket:”来到sub_402540函数 …