且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

NuGet服务器搭建教程

更新时间:2022-01-26 14:27:51

本文主要来自网络,进行整理而成,相关文章如下:

http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server

https://www.cnblogs.com/dudu/archive/2012/06/05/nuget_server_push.html

 https://www.cnblogs.com/haogj/p/4468512.html

 

 

NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,已经整合在了VS2010 SP1及以上的版本中。

一、网站构建

首先,确保你的机器在互联网上,并且能够访问NuGet服务器。

创建一个空的ASP.NET网站,选择Framework4(根据自己的需要创建一个web站点)

NuGet服务器搭建教程

接下来,用NuGet为这个Web Project安装“NuGet.Server”库。

NuGet服务器搭建教程

安装成功后,你的Solution会变成这样一个结构。并且不需要写任何代码或更改任何配置,它已经可以运行了。注意,Packages里只有一个readme.txt,这个目录是用来放NuGet包的,它就是存放包包的仓库。

NuGet服务器搭建教程

现在,网站已经构建完成。

二、配置和部署

1. 在web.config > appSettings 中设置存放包包的仓库的路径

  <appSettings>
    <add key="packagesPath" value="~/Packages" />
  </appSettings>

2. 在web.config > appSettings 中设置apiKey,上传包包时,需要通过这个apiKey进行验证。

  <appSettings>
    <add key="apiKey" value="12345trewq" />
  </appSettings>

3. 在IIS中为这个项目创建一个Web站点,然后通过浏览器访问,如果设置正确,会出现如下的页面:

NuGet服务器搭建教程

这里可以看见所有我们拷到packages目录下的包:

发布后访问http://nuget.xxxx.cn/nuget/Packages 可以看到所有的发布包

三、客户端打包/上传包包

1. 打包,也就是生成.nupkg文件

有三种方式:

a) 通过nuget pack命令

比如,我们对一个名称为“项目A”的VS2010项目进行打包,对应的命令行是:

开启cmd,切换到项目的.csproj所在文件夹同一级目录,

nuget pack 项目A.csproj -Build -Properties Configuration=Release

运行该命令后,nuget会自动调用msbuild以Release方式编译该项目并在当前文件夹中生成“项目A.nupkg”。

b) 在Visual Studio编译时自动打包

  要启用程序包恢复功能,可右键单击解决方案(注意,不是右键单击项目文件),并选择 Enable NuGet Package Restore (启用NuGet程序包还原) 选项。屏幕上会显示一系列提示对话框

NuGet服务器搭建教程

  然后修改发布项目的.csproj文件,在PropertyGroup中添加<BuildPackage>true</BuildPackage>,如下图:

NuGet服务器搭建教程

这样设置后,Visual Studio编译该项目时会自动在bin文件夹中生成对应的.nupkg文件。

c) 通过msbuild命令在编译时进行打包

比如,在命令行中运行下面的命令:

msbuild CNBlogs.Infrastructure.Logging.csproj /p:BuildPackage=true

注:通过msbuild传参数不需要修改任何配置文件,这样可以很方便地进行自动化。

2. 上传至NuGet服务器

 通过nuget push命令进行上传,比如:

nuget push 项目A.nupkg -s http://nuget.cnblogs.com 12345trewq

注:项目A.nupkg是包包的名称,http://nuget.cnblogs.com是NuGet Server网址,12345trewq是之前在web.config中设置的apiKey。

【遇到的问题】

开始时,我们执行这个命令后,出现错误:

Failed to process request. 'Method Not Allowed'.
The remote server returned an error: (405) Method Not Allowed..

产生这个错误是由于IIS安装了WebDAV模块:

NuGet服务器搭建教程

删除WebDAV Module与WebDAV Hanlder,上传时会返回404错误,通过浏览器访问路径nuget/Packages也是404错误。

查看IIS日志发现nuget push实际执行的是HTTP PUT操作 —— PUT /api/v2/package/,WebDAV不允许这个操作。解决方法在文章末尾。

 

3. 打包/上传一条龙

a) 通过批处理实现

优点:可自动化,可一次打包/上传多个项目。

批处理示例:

nuget pack ..\CNBlogs.Domain.Core\CNBlogs.Domain.Core.csproj -Build -Properties Configuration=Release
nuget pack ..\CNBlogs.Bootstrap\CNBlogs.Bootstrap.csproj -Build -Properties Configuration=Release
nuget pack ..\CNBlogs.Presentation.Web\CNBlogs.Presentation.Web.csproj -Build -Properties Configuration=Release
nuget push *.nupkg -s http://nuget.cnblogs.com 12345trewq

目前我们采用的就是这个方法。

b) 通过图形界面工具NuGetPackageExplorer实现

优点:操作方便

缺点:不能一次处理多个项目,不能自动化

 

 

常见发布问题

NuGet Package Explorer上传时报:failed to process request:'Method Not Allowed'错误解决办法

 相关日志:PUT /api/v2/package - 1000 -  NuGet+Package+Explorer/3.15.0.0+(Microsoft+Windows+NT+6.2.9200.0) - 405 0 0 0

 解决办法Web.config里面加入设置: 

<system.webServer> 

  <modules> 
    <remove name="WebDAVModule" /> 
  </modules> 
  <handlers> 
    <remove name="WebDAV" /> 
  </handlers> 
</system.webServer>