转自http://www.cnblogs.com/n-pei/archive/2011/05/02/2034508.html
最近学了不少NuGet的东西,也看了很多它的视频,特别是在MIX11上的视频。
如果我们要在MIX11上评出一个明星的话,你可能会觉得是WP7,或者是SL5,那么你肯定错了,明星肯定是NuGet。因为几乎每个微软演讲的人员都在用NuGet。为什么它会这么受大家欢迎??很简单,它提高了大家做事情得效率,而且使用起来轻松,简单。
如果你去Google下nuget说明,你会发现结果如下:
基本上没都少文章,而且好多都是我写的那篇文章的转载,声明下,我不是臭美。。。就是觉得如果大家很多人有写它的使用,那么我就不用费劲再去写这些了。特别是很多人都是说明它如何在Asp.net MVC项目中的使用。其实在传统的Asp.net项目中同样好用。
关于NuGet的基本介绍你可以按我上图给的搜索去找我写的文章,我就不给link了。
在进行练习之前,我们先创建一个空的asp.net解决方案,(不是MVC )
1.添加第三方代码包的使用
传统的添加dll方式,就是下载,解压,然后找到需要添加到项目中的dll,接着添加引用,使用NuGet添加dll就比较简单,首先你可以去Nuget.org去查找是否有你要添加的第三方软件包,例如我们要添加elmah:
使用Package Manager Console来添加Elmah。
除了添加dll,我们也可以添加别的文件,例如我现在创建的是一个空的asp.net解决方案,那么在web工程中我想把jQuery添加进来,项目模板中自带的是1.4的,我想用1.5怎么办呢??直接使用Install-Package Elmah就行了
现在去写jquery的脚本,你发现没有智能提示,别急,可以使用 Install-Package jquery.vsdoc来安装最新的智能提示包。。
2.如何创建本地引用
创建本地引用比较简单了,例如,我们刚才已经添加了几个安装包,那么你可以在解决方案下看到一个Packages文件夹。本地引用我们就使用它吧。
点击下图所示按钮,进入Setting页面,
添加一个名字为LocalFeed的本地包源。路径指向上面所说的那个packages文件夹:
在Package Resource中找LocalFeed:
你可以把这个路径指向任何一个存放nuget 包的地方。。。。。
3.创建自己公司的NuGet Server.
上面那个方式是使用本地的资源包方式,那么如果是一个大的公司,或者说你公司会提供一个服务器来为你们存放内部的公用dll,传统的大家添加这些公用的dll方式就是从SVN或者其他源码管理工具上拿,也是需要先找到,然后去download,再添加引用进来。
如果有dll进行了更新,其他各个项目组都需要用新的dll,大家都得重复性的下载,添加引用,甚至还得删除掉原来的dll。。。。
这时候创建本地的nuget server就显得有必要了。
如何创建呢???????????????????
首先也是创建一个空的asp.net的项目:
说再安装下Nuget.Server这个包,在nuget官方提供的Feed上就有它。
安装好以后,在Packages文件夹下放几个nuget的包,然后访问default.aspx:
在Packages页面你可以看到包含的nuget包,nuget是OData形式的ATOM Feed。如下图:
按照第2点中介绍的把http://localhost:55326/nuget/添加到你的nuget源:
现在就可以把你们公司共用的dll打包成nuget的包,然后放到这个网站的Packages目录下了。
上面一直介绍NuGet的feed如何自己创建,那么公司内部如何打包nuget呢????
4.如何把代码打包成Nuget包
首先需要去codeplex上下载nuget command line:
这玩意可是打包利器啊,教大家两种打包方式:
a.直接通过工程文件打包dll:
创建一个类库,然后编译下。把刚才下载的nuget.exe拷贝到工程文件所在的文件夹中:
通过命令行来创建nuget包:
搞定了:
B:使用nuget的spec文件进行打包:
首先你得创建一个nuget的.spec文件:
在工程中编辑刚才创建的spec文件:
你可以编辑nuget包的信息,比如作者,版本等等。。。
另外你也可以在打包时创建两个文件夹,一个是content,一个是tools文件夹。
5.NuGet的高级应用(Scaffold的扩展)
这个部分会是结合powershell和t4模板来一起通过一个类来自动创建增删改查的例子。我准备把源代码放到codeplex上。
代码和介绍说明我下周在公司和大家分享nuget后,再把文章和代码已经ppt补上。。。。。。
如果你对NuGet感兴趣,可以关注下我,到时候可以随时看到文章更新。