用NuGet.Server管好自家的包包
来源:互联网 发布:wifi网络 编辑:程序博客网 时间:2024/06/08 15:07
服务下载地址:http://nugetserver.net/
用NuGet.Server管好自家的包包
每一个成功产品的背后至少有一个伟大的类库,每一个伟大的类库都归属于一个优秀的包包(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 中设置存放包包的仓库的路径
<appSettings> <add key="packagesPath" value="~/Packages" /> </appSettings>
4. 在web.config > appSettings 中设置apiKey,上传包包时,需要通过这个apiKey进行验证。
<appSettings> <add key="apiKey" value="12345trewq" /> </appSettings>
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) 通过图形界面工具NuGetPackageExplorer实现
优点:操作方便
缺点:不能一次处理多个项目,不能自动化
具体操作方法,请阅读NuGet学习笔记(2) 使用图形化界面打包自己的类库
三、打包/上传自动化的进一步解决方案
该解决方案还没实现,这里只是分享一下我们的思路。
通过一个ASP.NET MVC程序实现,名称叫“一键发包”。
操作流程:
在浏览器中选择要发布至NuGet服务器的项目名称并点击“Push” -> 服务端自动运行Git命令从代码库中获取该项目的代码 -> 自动运行msbuild命令编译该项目并生成.nupkg文件(msbuild projectname.csproj /p:BuildPackage=true)-> 自动运行nuget push命令发布至NuGet服务器(nuget push)。
- 用NuGet.Server管好自家的包包
- 用NuGet.Server管好自家的包包
- 用NuGet管理好你的包包
- 程序员,用NuGet管理好你的包包
- 告别拷贝,Nuget帮您管理好您的包包
- 用制度管好你的网络
- 管好你的上司
- 管好你的移动硬盘
- 管好自己的嘴
- 【推荐】看到一款鼻尖好用的图片管…
- 买的香奈儿包包
- Windows Server 2008下“管”好Guest帐户
- 管大师:企业CRM的好选择
- 包包!
- 用Storage Foundation管好存储系统-安装
- 用Storage Foundation管好存储系统-入门
- 用Storage Foundation管好存储系统-进阶
- 用Storage Foundation管好存储系统-高级
- 一种自动化测试用例集生成工具——EvoSuite
- 练习5.25
- C++11 比较好的语法(一)
- java面向对象的三大特征
- Niginx应用——动静分离
- 用NuGet.Server管好自家的包包
- KMP算法
- 雅鲁藏布大峡谷自助游
- 163的在线编辑器简析和配置使用
- 两个通用的产生一个编号字段的思路
- Java方法的参数是按值传递的.
- ThinkPHP3.1快速入门(19)文件上传
- 第七章:查找技术
- Nginx如何优化突破十万高并发