NuGet学习笔记(转)
NuGet学习笔记(1)——初识NuGet及快速安装使用
http://kb.cnblogs.com/page/143190/
1. NuGet是什么?
NuGet is a Visual Studio 2010 extension that makes it easy to add, remove, and update libraries and tools in Visual Studio projects that use the .NET Framework. This topic lists documentation that will help you use NuGet packages and create your own. NuGet 是一个Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。
这就是说: 我们往往在开发项目里,会使用一些第三方的dll, 如:Newtonsoft.Json.dll (它为我们提供了进行序列化和反序列化解决方案, 很有用,也很稳定,还很有名气)。 但是,我们往往也面临随着项目升级,对这些引入的第三方插件进行升级的可能和必要。 比方说,原本的项目是vs2008 + C# 3.5 实现的,并引入了Newtonsoft.Json.dll 2.0版本, 现在对项目升级成了Vs 2010 + C# 4.0。 如果 你想或者必须将旧版本升级到最新版本才能工作或者仅是保持版本上的一致; 同时,Newtonsoft 提供Json.Net对C# 4.0 支持版本,即:Newtonsoft.Json.dll 4.0。 你就需要到官网或者通过Google 去寻找它的最新版本,下载,解压,然后替代等操作。 似乎看上去,也没多少复杂的事情, 也习以为常了。谁叫咱引用别人的东西,只能跟着走了,习惯了这样的更新,总比自己写更快吧。
现在,NuGet 将这个过程系统化,令你可以更加方便的查找你要的第三方的dll, 同时,还可以为你提供自动或者手动更新,而无需你在人肉搜索与更新了。 |
初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package Manager,右键项目文件多了一项Manage Nuget Packages...,这是个神马玩意儿,当时是一头雾水,后台查了些资料才知到NuGet是 Visual Studio的一个扩展,引用dudu的话来说就是管理程序的包包,可以参考msdn上这篇文章使用 NuGet 管理项目库以及咱们博客园站长dudu写的程序员,用NuGet管理好你的类库,有些类似java中常用的maven
为什么要使用NuGet
简单的说NuGet可以是我们的工作更方便,当我们的项目里要引用到的一些库时候,比如JQuery、Newtonsoft.Json、log4net等,我们需要从网上下载这些库,然后依次拷贝到各个项目中,当有的类库有更新时又不得不再重复一遍很是繁琐 ,这时就可以考虑使用NuGet来帮我们管理和更新这些类库,而且更新类库时会自动添加类库的相关引用,方便至极。当然网上一些我们常用的类库更新频率不是很高而且即便出了新版本我们也没必要总是保持最新,故这点对我们的帮助比较有限,个人认为NuGet最大的好处在于可以搭建自己的类库服务器,想想一下吧,在一些较大些的公司里面有很多的项目,然后其中有一些是整个组,甚至整个公司通用的类库,当这些类库有更新后我们需要依次拷贝到我们的项目,甚至于有时候我们自己都搞不清楚各个项目里的版本是否一致,有时偶尔一两个项目忘了复制更新出现莫名其妙的错误,为此头疼不已,现在有了NuGet,世界从此而不同。
安装NuGet扩展
要使用NuGet首先需要安装它(在安装了MVC3的系统上已自动安装了NuGet)
1. 点击 工具-->扩展管理器(R)...-->右上角搜索框输入NuGet
2. 点击 NuGetPackage Manager 项上面的下载按钮开始下载NuGet
3. 下载完成后出现安装页面,点安装开始安装
4. 很快安装完成,然后点击关闭完成整个安装
5. 安装完后NuGet暂时不能用,需要重新启动下VS才行,重启后完毕后打开 扩展管理器(R)... 在已安装的扩展里可以看到NuGet Package Manager已经安装好了
使用NuGet下载需要的类库
1. 打开NuGet管理界面
2. 出现如下界面,可以在里面找自己想要的类库也可以在右上角搜索里面输入关键字查找自己想要的类库,找到合适自己的类库后点install进行安装
3. 这里我们选择安装Json.Net,点击安装好出现组件下载界面
4. 下载完成后会出现提示将类库安装到什么项目,这里我们选择安装到TestConsole项目
5. 安装完成后可以看到已经安装的Josn.Net显示一个已安装的小对勾
6. 打开项目引用可以看到我们刚选择的类库Newtonsoft.Json已经自动添加到项目引用中
使用命令行管理你的类库
1. NuGet提供了命令行安装方法,在菜单中选择Package Manager Console,打开命令行控制台
2. 出现NuGet控制台界面,默认类库源(Package source)为官方站点,也可以指向自己搭建的本地或内网站点,Default project表示默认将下载的类库添加到那个项目的引用中
3. NuGet控制台有几个常用命令
Get-Package 获取当前项目已经安装的类库
Install-Package 安装指定类库,命令格式如下:Install-Package 类库ID,如Install-Package Newtonsoft.Json 这里需要注意的是类库的ID是唯一的,指向命令后会自动搜索指定类库源里指定ID类库,若找到则自动下载并添加引用,找不到则会出现找不到类库的提示
Uninstall-Package 卸载指定类库,命令格式如下:Uninstall-Package 类库ID,如Uninstall-Package Newtonsoft.Json
Update-Package 更新指定类库,命令格式如下:Update-Package 类库ID,如Update-Package Newtonsoft.Json
ps:刚开始不熟悉时可以使用界面方式下载和更新类库,有一定经验后还是建议使用控制台添加、更新类库这样很方便,由于使用控制台需要知道类库的准确ID,可以到http://www.nuget.org/packages这里去查找,把自己常用的ID记录下方便以后使用
NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新。在安装好NuGet扩展后,我们已经能够通过NuGet轻松下载自己需要的类库,下面来说一说如何将自己的项目类库进行打包发布
使用图形界面打包自己的类库
NuGet可以使用NuGet.exe在命令行下进行类库打包,也可以使用图形化界面进行打包,估计很多朋友都和我一样对不熟悉的命令行有些感冒,所以在此仅讲述下使用图形化界面进行类库打包
1. 首先下载 包包管理器 NuGetPackageExplorer,顾名思义,包包管理器可以用来创建新的类库包,也可以浏览已经创建好的类库包
2. 下载完成后,双击 NuGetPackageExplorer.application 进行安装,安装完成后会在桌面上生成一个NuGet Package Explorer 的快捷方式
3. 双击NuGet Package Explorer出现启动界面,选择Create a new package(Ctrl+N)创建一个新包
4. 选择菜单 Edit > Edit Package Metadata (或者 CTRL + K) 编辑包包信息
这里可以编辑类库包的信息和添加类库、程序集的引用解释下几个比较重要的字段
Id:用于定位类库包的唯一标示,如在命令行下执行 Install-Package MyPackage 这里的MyPackage就是包包的Id值
Version:类库的版本号,这里建议和程序集的真实版本号保持一致,以免发生混淆
Dependencies:此类库依赖的程序集,根据实际情况添加依赖类库的Id和版本号,若无留空即可,这里需要注意下填写的依赖类库需要在NuGet服务器上能找到,否则无法完成自动引用添加
Framework assemblies:依赖的Framework 程序集,根据实际需要选择即可,一般无需设置
除以上四项以外其他属性根据实际情况修改即可,若自己用不修改也中,不过为了使用方便还是建议把类库描述(Description)填写下
5. 编辑好包包信息后接下来添加DLL到包包中
可以选择 右键-->Add Existinng File... 选择dll添加,也可以直接拖拽DLL到 Package contents 窗口,此例选择拖拽方式
直接拖拽dll到窗口后,会出现提示:是否将 Winista.HtmlParser.dll放到lib 文件夹下,一般我们选择是
6. DLL添加完成后,快捷键Ctrl + K 修改包包信息Id为Winista.HtmlParser,版本号为1.8.0
7. 信息修改和dll都添加完毕后,选择File --> Save(或Ctrl + S)将文件进行保存,默认文件名为Id + 版本号.nupkg
8. 完成保存后如需要发布到网上,选择File--> Publish...(或Ctrl + P)
默认的发布地址是官网,发布 Key需要到官网去注册一个账号,然后就可以得到,这里不在复述,若无需发布直接关闭即可
ps:这里没有讲述如何打包项目文件,一般情况下我们自己将项目文件编译成DLL然后使用图形化界面打包即可满足需求,若实际工作需要高度集成完全自动化操作可自行去研究下官方文档http://docs.nuget.org/
添加DLL默认会添加Lib文件夹,额外的菜单上还有很多.net文件夹,src等文件夹,这些文件夹只是对文件上的一个物理上的划分而已,只是为了帮助我们做好文件分类,没有其他的用途,dll文件可以随便放置,不过为了规范还是建议按照通常习惯来放置。
创建NuGetServer Web站点
1. 新建Web站点,选择 文件-->新建项目-->Asp.Net 空 Web应用程序
2. 选择 工具-->Library Package Manager-->Package Manager Console 打开NuGet命令行控制台
3. 在控制台输入Install-Package NuGet.Server (请保持Package source:官方源,即 Nuget offical package source,一般默认即为官方Package源)
4. 回车确认后开始下载并安装NuGet.Server类库及相关引用,并自动添加引用到项目
注:具体输出根据版本不同会略有不同
自动添加的引用
5. 在控制台输入 Get-Package 可以看到刚刚安装的类库
6. 除添加类库引用外,还自动添加了一些文件(关于这些文件及其作用本文不做探讨,有兴趣的可以自行研究下,都很简单)
/App_Readme/
/App_Readme/Elmah.txt
/DataServices/
/DataServices/Packages.svc
/DataServices/Routes.cs
/Packages/
/Packages/Readme.txt
/Default.aspx
/favicon.ico
/packages.config
同时Web.config也被修改,添加了一些配置项
7. 至此NuGet.Server站点已经创建完毕,恩,你没有看错,就是这么简单,接下来部署到本地或IIS站点即可使用了
1. 发布网站到本地
2. IIS里面建立站点www.mynuget.com,主机头www.mynuget.com,应用程序池为.Net4.0集成模式,目录指向站点发布的目录
3. 设置hosts 将www.mynuget.com执向本机
4. 设置好hosts后,重新打开浏览器输入网址:http://www.mynuget.com/
5. 查看已经发布的类库包 http://www.mynuget.com/nuget/Packages (可以把已经打好包的类库放到网站下的Packages文件夹下即可)
1. 选择 工具-->Library Package Manager-->Package Manager Settings
2. 输入名称 MyNuGetServer及包包源地址 http://www.mynuget.com/nuget 点击Add完成源添加
7. 查看刚刚添加的类库源 工具-->Library Package Manager-->Manager NuGet Packages for Solution... 点击刚添加的源MyNuGetServer可以看到我们放到站点下的类库包,选中需要的包包点击 Install完成安装
8. 也可以在控制台下安装,将类库源执行我们建立的源 MyNuGetServer,控制台下输入Install-Package Winista.HtmlParser完成安装
现在我们已经成功的搭建了自己的NuGet服务器。
注意点:
1. NuGet包包是放置在站点根目录下面的Packages文件夹下,如需要改变可以在配置文件packagesPath中进行设置,可以设置为相对目录或者物理目录
<appSettings> <!-- Change the path to the packages folder. Default is ~/Packages. This can be a virtual or physical path. --> <add key="packagesPath" value="" /> </appSettings>
2. 如何管理我们的包包,可以根据需要自行写个上传下载的文件管理功能,需要时上传到Packages文件下,不需要了删除即可,也可以像我一样写了个FTP服务,使用ftp上传下载
3. 最好是为NuGet单独建立个站点这样管理着方便,若不方便建立独立站点可以随便找个现有的web站点,在里面安装NuGet.Server然后发布即可
回头看整个过程:安装NuGet扩展,下载网上的类库包供自己使用,打包自己的类库,搭建自己的NuGet服务器,整个流程基本走完了,剩下的就是我们如何去利用好NuGet这个强大的工具了。