问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在生产环境使用Nuget

发布网友 发布时间:2023-05-10 19:23

我来回答

1个回答

热心网友 时间:2024-11-15 12:48

  本文将简单介绍在生产环境使用Nuget 要在实际生产环境使用它来做打包和包管理 比之更为成熟的Maven来说 从目前版本来看稍有不足

  关于Nuget

  官方提供的使用文档比较丰富

  要在实际生产环境使用它来做打包和包管理 比之更为成熟的Maven来说 从目前版本来看稍有不足 主要是以下几点

  nfig的继承和解决方案中的识别

  比如

  nuget updatexx sln : nuget nfig

  它做的事只是对比包得版本是否有更新并更新之 只要版本没有变化 即使本地仓库没有这个包也不会去下载它 而

  nuget install nfig

  只能指定具体的config文件 不能通过一个sln件自动去扫描解决方案里的所有nfig

  和build的集成度

  类似上面一点 build的时候不会对本地仓库不存在的必备依赖去自动获取

  nuget虽然提供 build参数 但是仅是使用了MSBuild 本身的构建描述能力缺乏(所以下文在生产环境使用会搭配NANT来完成构建过程) 而maven中则比较完整的集成了这个过程

  repository的安装位置不可配置

  默认情况下package的安装目录是在 sln所在的目录下建立一个packages目录 也就是说是solutionfile级别的 这个对于项目数量多的时候是比较难接受的 本地开发还好 在build服务器构建的时候就比较麻烦了 不能再同一个位置管理包

  这个问题在它的官方已经有人在问了 估计下几个版本会有动作

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

  下述范例所在目录结构

  

  创建包描述文件:

  

<?xmlversion xmlversion="1.0" ?>  <packagexmlns packagexmlns="" >  <metadata>  <id>Package.Castle </id>   <version>2.1 </version>  <title>Castle </title>  <authors>Castle </authors>  <owners/>  <requireLicenseAcceptance>false </requireLicenseAcceptance>   <description> IOC容器    </description>   <copyright>2011 </copyright>  <language>zh-CN </language>  </metadata>  <files>   <filesrc filesrc="CastleCastle.Core.dll"target="lib et40Castle.Core.dll" />   <filesrc filesrc="CastleCastle.Core.xml"target="lib et40Castle.Core.xml" />  <filesrc filesrc="CastleCastle.DynamicProxy2.dll"target="lib et40Castle.DynamicProxy2.dll" />   <filesrc filesrc="CastleCastle.DynamicProxy2.xml"target="lib et40Castle.DynamicProxy2.xml" />  <filesrc filesrc="CastleCastle.MicroKernel.dll"target="lib et40Castle.MicroKernel.dll" />   <filesrc filesrc="CastleCastle.MicroKernel.xml"target="lib et40Castle.MicroKernel.xml" />   <filesrc filesrc="CastleCastle.Windsor.dll"target="lib et40Castle.Windsor.dll" />   <filesrc filesrc="CastleCastle.Windsor.xml"target="lib et40Castle.Windsor.xml" />  </files>  </package>     

  批量打包和发布到feeds,pack.bat脚本如下:

  

 echo off   mkdir assemblypackages   echo pack   forfiles /p assembly /m *.nuspec /c "cmd /c .. ools uget pack @file-outputdirectory packages"  echo push   forfiles /p assemblypackages /m *.nupkg /c "cmd /c .... ools uget push @file-s&//ops-base/feeds/hello1234"  echo on 

  批量安装和更新本地package,nuget.install.bat脚本如下:

  

echo off  echo install  forfiles /s /m nfig /c "cmd /c %1 uget install @file -o %2" echo update  forfiles /s /m nfig /c "cmd /c %1 uget update @file -source&//ops-base/feeds/nuget" echo on 

  然后使用NANT然完成构建过程,nant.build部分内容如下:

  

   <?xmlversion xmlversion="1.0" ?>   <projectname projectname="infrastructure"default="build" >  <propertyname propertyname="nfig"value="release"dynamic="true" />  <!--path-->  <propertyname propertyname="dir"value="." />   <propertyname propertyname="dir.tools"value=". ools" />  <propertyname propertyname="build.base"value="build${nfig}" />   <propertyname propertyname="build.absolutepath"value="${path::get-full-path(build.base)}" />  <!--m *** uild-->10:  <propertyname propertyname="m *** uild"value="C:WINDOWSMicrosoft.NETFrameworkv4.0.30319MSBuild.exe" />  <propertyname propertyname="nfig"value="Debug"dynamic="true" />  <iftest iftest="${nfig=='Release'}" >  <propertyname propertyname="nfig"value="Release" />  </if>  <propertyname propertyname="m *** uild.params"    value="/t:rebuild    /p:Configuration=${nfig}  /p:AllowUnsafeBlocks=true  /t:ResolveReferences"  />  <propertyname propertyname="m *** uild.params.weboutput"value="/t:_CopyWebApplication /p:WebProjectOutputDir=${build.absolutepath}" />  <propertyname propertyname="m *** uild.params.output"value="/p:OutputPath=${build.absolutepath}" /> <!--nuget-->  <propertyname propertyname="nuget"value="${path::get-full-path(dir.tools)}" />  <propertyname propertyname="nuget.packages"value="${dir}packages" />  <propertyname propertyname="nuget.install"value="${dir} uget.install.bat" />  <propertyname propertyname="nuget.params.install"value="${nuget} ${path::get-full-path(nuget.packages)}" />  <!--build infrastructure-->  <targetname targetname="base"description="Infrastructure" >  <execprogram execprogram="${nuget.install}"mandline="${nuget.params.install}"workingdir="${dir}" />   <execprogram execprogram="${m *** uild}"  mandline="${m *** uild.params} ${m *** uild.params.output}" workingdir="${dir}Infrastructure\" />   </target>   </project> 

  上述nant脚本中,target=base的构建目标就是要构建的项目了,首先执行nuget.install.bat脚本更新本地packages,然后执行m *** uild

  然后运行下述脚本执行构建:

  . ools antin ant base

lishixin/Article/program/net/201311/13014
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 房产官司律师费多少 你知道哪些辨别耳机的好坏的方法值得推荐? 09款凯美瑞可以蓝牙音乐吗 什么是衡量一切经济活动最终的综合指标 07年凯美瑞2.4豪华版有蓝牙吗 版图的造句版图的造句是什么 国盾量子何时退市 国盾什么时候上市 生物技术专业考研学校排名有哪些? 微信视频号可以卖一类器械吗 为什么微信上卖假药 三闾庙译文 | 注释 | 赏析 ...年前加的微信没有删过信息删了能查到什么时候加的么? 汽车轮毂单元二代三代是什么意思 什么是几代车 胎儿四个月心脏共同动脉干能长好吗? 喷淋头标准68度的误差是多少 工商银行电话多少 photoshop中的滤镜中的风格化,像素化里面的参数都是什么意思啊? 哈苏色温滤镜上的参数:1x cr1.5 -0 是什么意思? 3岁宝宝血管瘤能消退吗 人生教育从狭义上来看是指学校教育 人生教育四大阶段,经典励志故事 人生观教育主要包括哪些内容 郑州公司注销怎么办理? cpr过程中常出现致命的错误 莺歌燕舞意思解释 一元人民币99版冠字号是F055 H75148 ‘H是黑色的。请问正常吗?_百度... 总有一款适合你的文案(二) 分手了女朋友送给我一个他的小皮筋不让我栽什么意思? 女人送手圈给我是什么意思? 女朋友把她闺蜜送她的小皮筋送给我什么意思? 时刻展现出优雅的什么 女士上车礼仪 2020-04-10《优雅,从姿势开始》Special 雪地胎上的孔是干什么的 换的新胎无意发现轮胎上胎面上一个圆洞,不像是被扎了的,像出厂就这_百... 华西医学终审是什么意思 终审判决需要报告省院吗 医院新技术新项目终审是在年底还是年初 南京机场外国人可以办理手机卡吗