程序员,用NuGet管理好你的包包(转)
每个女人都有很多包包;其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”。这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的。
包包有个特点:容易坏,更新快,新品多。于是,市场上有了包包专卖店,家里有了专门放包包的衣橱。于是,女人经常逛街买包包,经常整理衣橱里的包包。而男人呢,不喜欢逛街,不喜欢整理。。。面对越来越多的包包,很多人发出感叹:做“会写程序的男人”难!
终于有人无法忍受这些大包小包的困扰,一款专门存放包包的“储包柜”横空出世 —— NuGet(http://nuget.codeplex.com/)。读音-“New-Get”,中文翻译-“新买的(包包)”,意指不管有多少包包,想扔就扔,想买就买,有NuGet帮您打理。
会写程序员的您,被包包困扰了吗?用NuGet吧。不仅免费,而且开源 —— 可以随心所欲地改装成自己喜欢的储包柜。
使用NuGet有两种方式
一种是大家熟知的在线免费包包专卖店 —— http://nuget.org/List/Packages,通过VS2010插件NuGet Package Manager可以方便地选用自己的包包。
一种是在公司或自己家里安装一个储包柜 —— 架设自己的NuGet服务器。如何架设自己的NuGet服务器,可以参考园子的两篇文章:
1. 在内部架设NuGet服务器
秀一下博客园开发团队的储包柜
2011年6月的某一天,博客园开发团队也有了自己的储包柜。
目前储包柜中主要存放的是一个很重要的包包 —— CNBlogsDomain,它包含我们的领域驱动开发(DDD)架构中的公共部分,被各个应用开发项目引用。
在没有NuGet的日子里。。。
- 我们要将CNBlogsDomain编译出的多个dll文件复制到各个项目的引用文件夹中。每次更新CNBlogsDomain,都要这样。
有了NuGet,生活从此改变。。。
1. 向自家的NuGet服务器发布CNBlogsDomain包包:
- 在CNBlogsDomain中建立一个publish文件夹。
- 下载NuGet打包器至publish文件夹(NuGet.exe, 立即下载)。
- 下载NuGetPackageUploader.exe包包上传器(立即下载)至publish文件夹,该“包包上传器”由园子里的lovecindywang开发(源代码下载)。
- 修改NuGetPackageUploader.exe.config,将endpoint address改为你的NuGet服务器地址。
- 在publish文件夹中创建一个NuGetRelease.bat批处理文件,完成包包的制作与上传。示例代码如下:
nuget pack ..\CNBlogs.Domain.Core\CNBlogs.Domain.Core.csprojNuGetPackageUploader .
- 发布包包时,只需运行NuGetRelease.bat,nuget命令会根据.csproj文件自动完成打包,NuGetPackageUploader会将当前文件夹中的所有包包(.nupkg文件)上传至NuGet服务器。
2. 在项目中选用自家NuGet服务器上的包包:
- 安装VS2010插件NuGet Package Manager,并在Package Manager的Package Sources添加自家NuGet服务器存放“包包”的网址。
- 在相应的项目中选用所需的“包包”并安装。
- 安装完成之后,NuGet会在当前项目的文件夹中生成一个packages.config(表示当前项目用了哪些包包),文件格式如下:
<?xml version="1.0" encoding="utf-8"?><packages> <package id="CNBlogs.Domain.Core" version="1.0.0.1"/></packages>
并在当前解决方案的根目录下生成packages文件夹,选用的包包会被下载到这里,还会生成一个repositories.config文件(存储的是每个packages.config的位置),文件格式如下:
<?xml version="1.0" encoding="utf-8"?><repositories> <repository path="..\CNBlogs.Applicaion.Demo\packages.config"/></repositories>
这样就用起了自家的包包。
3. 包包的升级
这里继续假设我们的包包名叫CNBlogsDomain。
- 首先,我们在CNBlogsDomain中修改相应的Assembly的版本号并编译,表明这是一个新款包包。
- 然后,运行上面提到的NuGetRelease.bat批处理文件,将新款包包发布至NuGet服务器。
- 接着,在使用这个包包的项目中通过VS2010打开Package Manage Console运行Update-Package命令更新为新款包包。NuGet会自动删除packages文件夹中的旧版包包,并下载新版包包。
?在使用中遇到的问题
-a. 根据配置文件repositories.config自动下载包包
问题场景:
一个人在一个项目中添加好所有包包之后,只想把NuGet相关配置文件(repositories.config与packages.config文件)放到代码版本库中,packages文件夹中的包包不放进去。另一个人签出代码后,需要重新下载这些包包,而NuGet命令只提供根据packages.config下载包包的功能(repositories.config分散在各个子项目文件夹中),并没有提供根据repositories.config下载包包的功能(repositories.config存储的就是packages.config文件的位置)。
解决方法:
写了一个批处理文件(install.bat)放在packages文件夹中,通过PowerShell脚本读取repositories.config,得到各个packages.config的位置,然后传给NuGet命令。代码如下:
powershell.exe -command"[xml]$config = Get-Content repositories.config;foreach( $repository in $config.repositories.repository){ .\NuGet install $repository.path} "
(为什么不直接写在.ps1文件中?是为了跳过PowerShell的执行限制, 不然要先执行一下Set-ExecutionPolicy RemoteSigned)
-b. 不改版本号,也能更新包包
问题场景:
NuGet每次更新包包,必须要发布一个不同版本号的包包。有时我们只进行了很少的改动,不想修改版本号。
临时解决方法:
继续使用上一个问题中的批处理文件,执行前删除packages文件夹中所有的包包,然后重新下载所有包包。
--进一步的解决方法需要去修改NuGet的源代码。
小结
程序员可以通过NuGet管理好自己的包包,那女人该如何管理好自己的包包呢?
程序员的天性是喜欢解决问题,不仅仅是通过代码解决问题。如果你是会写程序的男人,把你在代码世界中的智慧带回现实世界,帮助你喜欢的女人解决问题。
转载于:https://www.cnblogs.com/DreamRecorder/p/9123966.html
程序员,用NuGet管理好你的包包(转)相关推荐
- 《告别失控:软件开发团队管理必读》一一第1章 程序员为何难以管理
第1章 程序员为何难以管理 告别失控:软件开发团队管理必读 程序设计作为一种严肃的职业已经存在60多年了.在美国,从事程序设计工作的程序员数以百万计,而全球这个数字更大.这些数字还不包括人数众多的学生 ...
- 程序员生存定律--管理向左,技术向右
点击打开链接 一个程序员在考虑增值时无法回避的一个根本问题是到底是做技术还是做管理.当然也有些职位会介于两者之间比如架构师,但我们暂时不去做细分,而是用简单的二分法. 这种基本方向上的选择对后续很多细 ...
- 程序员的时间管理计划
目录 01优秀程序员的时间概念 02优秀程序员的时间分类 03时间管理法则 最近大家都在忙着做什么呢?忙着找工作?忙着工作?抑或是忙着当一条咸鱼,但是每天都给自己贴上一条正在忙着思考人生的标签? 不管 ...
- 写给程序员的时间管理
点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片源自:unsplash 作者 艾力 转载自公众号:Leetcode名企之路 如 ...
- 用NuGet管理好你的包包
转自:http://www.cnblogs.com/dudu/archive/2011/07/15/nuget.html 每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 -- 代码世界中 ...
- 从《跨过鸭绿江》中看程序员的时间管理实践
<跨过鸭绿江>是一个十分好的记录抗美援朝70周年的爱国题材电视剧 我不是军事专家 我简单表达一些这里面的策略对于我们时间管理方面的思考 我只是举几个例子 如著名的长津湖战役 传说中的包饺子 ...
- 透过现象看本质-IT程序员成长及管理
引子 拜互联网东风,软件工程师这个外行觉得有些奇葩的行业也显得无比巨大,以成都为例,有数千家IT科技公司,10万级的技术工程师,我不知道其他科技类公司是否有如此庞大的体量,这个行业也有典型的" ...
- 程序员的密码管理之道
承香墨影 最快捷的技术进阶之路 正文共: 1474字 5图 预计阅读时间: 4分钟 Hi,大家好,我是承香墨影! 在这个互联网服务,渗透到我们生活的方方面面的时代,我想每个人手里都有大量的账号,社交账 ...
- 程序员怎么向上管理领导拿高绩效!
阅读本文大概需要15秒 文/ 强哥 图/ 强哥 未经授权禁止转载,开白请在菜单栏获取联系方式 (原创凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字数凑字 ...
最新文章
- 【VMC实验室】在QCloud上创建您的SQL Cluster(1)
- R语言将dataframe数据从宽表变为长表实战(melt函数、pivot_longer函数、gather函数)
- sql server 2008学习13 触发器
- C语言学习之编写一个C程序,运行时输人abc三个值,输出其中值最大者。
- 数字滤波常用方法(转)
- ROADS POJ - 1724(最短路+邻接表+dfs)
- python爬虫教程-Python教父|廖雪峰老师官方爬虫教程,13个案例带你全面入门!
- Ubuntu下如何安装Dynamips
- 随机过采样与随机欠采样 代码
- 移动硬盘格式化了?这样恢复数据
- ansys19.0安装破解教程(图文详解)
- mantis Linux安装教程,CentOS Linux安装mantis
- Qt国际化详细步骤(手把手教你如何国际化)
- char char* 的困惑
- 陌陌Android客户端一面
- 【转】指定页面进行Monkey测试
- Ajax系列之三——服务器客户端交互
- CSS font-size字体相关
- POJ 3130 How I Mathematician Wonder What You Are! 半平面交
- VS2019编译OpenSees 3.0.0 总结