nuget,生产环境使用Nuget

关于Nuget http://nuget.org/
官方提供的使用文档比较丰富 http://docs.nuget.org/
要在实际生产环境使用它来做打包和包管理,比之更为成熟的Maven来说,从目前版本来看稍有不足,主要是以下几点:

packages.config的继承和解决方案中的识别

比如:
1: nuget update xx.sln
2: nuget update packages.config
它做的事只是对比包得版本是否有更新并更新之,只要版本没有变化,即使本地仓库没有这个包也不会去下载它,而
1: nuget install packages.config
只能指定具体的config文件,不能通过一个sln件自动去扫描解决方案里的所有packages.config

和build的集成度:

类似上面一点,build的时候不会对本地仓库不存在的必备依赖去自动获取
nuget虽然提供 -build参数,但是仅是使用了MSBuild,本身的构建描述能力缺乏(所以下文在生产环境使用会搭配NANT来完成构建过程),而maven中则比较完整的集成了这个过程

repository的安装位置不可配置:

默认情况下package的安装目录是在.sln所在的目录下建立一个packages目录,也就是说是solutionfile级别的,这个对于项目数量多的时候是比较难接受的,本地开发还好,在build服务器构建的时候就比较麻烦了,不能再同一个位置管理包
这个问题在它的官方已经有人在问了,估计下几个版本会有动作

以下提供一些解决上述问题或实际应用时的一些方法

下述范例所在目录结构:
image生产环境使用Nugetnuget
http://ops-base/feeds/ 是自己hosting的一个nuget feed(http://docs.nuget.org/docs/creating-packages/hosting-your-own-nuget-feeds)
创建包描述文件:
1:
2:
3:
4: Package.Castle
5: 2.1
6: Castle
7: Castle
8:
9: false
10:
11: IOC容器
12:

13: 2011
14: zh-CN
15:

16:
17:
18:
19:
20:
21:
22:
23:
24:
25:

26:

批量打包和发布到feeds,pack.bat脚本如下:
1: echo off
2: mkdir assembly\packages
3: echo pack
4: forfiles /p assembly /m *.nuspec /c "cmd /c ..\tools\nuget pack @file -outputdirectory packages"
5: echo push
6: forfiles /p assembly\packages /m *.nupkg /c "cmd /c ..\..\tools\nuget push @file -s http://ops-base/feeds/ hello1234"
7: echo _disibledevent=> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } 批量安装和更新本地package,nuget.install.bat脚本如下:
1: echo off
2: echo install
3: forfiles /s /m packages.config /c "cmd /c %1\nuget install @file -o %2"
4: echo update
5: forfiles /s /m packages.config /c "cmd /c %1\nuget update @file -source http://ops-base/feeds/nuget"
6: echo _disibledevent=> .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } 然后使用NANT然完成构建过程,nant.build部分内容如下:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

15: 16: value="/t:rebuild
17: /p:Configuration=${msbuild.config}
18: /p:AllowUnsafeBlocks=true
19: /t:ResolveReferences" />
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31: 32: commandline="${msbuild.params} ${msbuild.params.output}"
33: workingdir="${dir}\Infrastructure\" />
34:

35:

上述nant脚本中,target=base的构建目标就是要构建的项目了,首先执行nuget.install.bat脚本更新本地packages,然后执行msbuild
然后运行下述脚本执行构建:
1: .\tools\nant\bin\nant base

到这里就完成了将nuget投入项目环境使用的相关准备工作:)
Tags:  安全生产费用使用 环境生产实习报告 生产现场环境管理 生产环境 nuget

延伸阅读

最新评论

发表评论