博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用NuGet.Server管好自家的包包
阅读量:6529 次
发布时间:2019-06-24

本文共 2449 字,大约阅读时间需要 8 分钟。

每一个成功产品的背后至少有一个伟大的类库,每一个伟大的类库都归属于一个优秀的包包(package),每一个优秀的包包都离不开一个顺手的包包管理器。而NuGet是.NET程序员首选的包包管理器。

这篇文章分享的是如何用NuGet.Server搭建自己的NuGet服务器,如何上传包包,以及我们使用中遇到的问题与自动化打包/上传方案。

一、NuGet服务端的搭建

准备材料:IIS + ASP.NET 4.0 + VS2010 + NuGet.Server

1. 打开VS2010,新建一个ASP.NET Empty Web Application项目

2. 通过NuGet安装NuGet.Server

上图中的Packages文件夹是安装NuGet.Server时自动生成的,它就是存放包包的仓库。

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

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

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

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

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

有三种方式:

a) 通过nuget pack命令

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

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

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

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

先要在VS2010中启用Eable NuGet Package Restore,然后修改发布项目的.csproj文件,在PropertyGroup中添加<BuildPackage>true</BuildPackage>,如下图:

这样设置后,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模块:

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

查看IIS日志发现nuget push实际执行的是HTTP PUT操作 —— PUT /api/v2/package/,WebDAV不允许这个操作。

根据网上的说法,必须要卸载WebDAV,可是这台服务器上有一个站点需要它,后来将NuGet Server安装到另外一台服务器解决了这个问题。

3. 打包/上传一条龙

a) 通过批处理实现

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

批处理示例:

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

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

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

优点:操作方便

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

具体操作方法,请阅读

三、打包/上传自动化的进一步解决方案

该解决方案还没实现,这里只是分享一下我们的思路。

通过一个ASP.NET MVC程序实现,名称叫“一键发包”。

操作流程:

在浏览器中选择要发布至NuGet服务器的项目名称并点击“Push” -> 服务端自动运行Git命令从代码库中获取该项目的代码 -> 自动运行msbuild命令编译该项目并生成.nupkg文件(msbuild projectname.csproj /p:BuildPackage=true)-> 自动运行nuget push命令发布至NuGet服务器(nuget push)。

 

相关链接:

 

转载地址:http://xatbo.baihongyu.com/

你可能感兴趣的文章
fedora17升级到fedora18
查看>>
单例模式(Singleton)
查看>>
函数指针和指针函数
查看>>
认识配置设置文件(INI与XML)
查看>>
DZ!NT论坛 3.6.711删除用户各种错解决方案
查看>>
Python的函数参数传递:传值?引用?
查看>>
[转]分享2011年8个最新的jQuery Mobile在线教程
查看>>
android call require api level
查看>>
Mac下android环境搭建
查看>>
创建Visual Studio项目模版向导的几篇参考文章
查看>>
深入浅出SQL Server Replication第一篇:走近Replication(上)
查看>>
[TopCoder][SRM] SRM 562 DIV 2
查看>>
SQLSERVER是怎麽通过索引和统计信息来找到目标数据的(第一篇)
查看>>
LocalAlloc,VirtualAlloc,malloc,new的异同
查看>>
回调函数
查看>>
win7 x64 jdk1.7.0_51
查看>>
45 Useful Oracle Queries--ref
查看>>
这些开源项目,你都知道吗?(持续更新中...)[原创]
查看>>
linux中利用iptables+geoip过滤指定IP
查看>>
在myeclipse中写sql语句的细节问题
查看>>