使用Nuget管理dll
前言
nuget 已经不是什么新东西,它是vs的一个扩展工具,可以让我们在项目中添加、删除、更新引用变得更加快捷方便。现在有许多传统公司对dll的管理还是很落后的,有些甚至时通过发送dll文件,这样做的直接缺点就是很繁琐、容易出错。之前就有试过一个dll的版本不对,测试人员更新到线上接口直接就挂了,接着就是花一堆时间定位问题。nuget可以让我们很方便的管理引用,减少许多不必要的麻烦。接下来就图文讲解一下如何在自己计算机、公司内部服务器,或者是nuget 服务器搭建自己的nuget库,本篇没有高级的东西,只对新手有参考价值。
搭建包服务器
1. 安装nuget工具
这个就很简单了,如果你的vs还没有那是不行的。直接在【工具】->【扩展和更新】 搜索一下nuget 即可安装,安装后在项目右键引用就会出现【管理Nuget程序包】菜单,在这里我们就可以安装所需要的引用,例如EF,Newtonsoft,jQuery 等等。下面的【程序包管理控制台】可以通过命令来安装引用,界面去操作是一样的。
2. 搭建nuget服务器
nuget 服务器其实就是一个站点,通过请求去获取需要的包。所以我们需要做的就是搭建一个web站点。
我们新建一个asp.net mvc 项目,在【程序包管理器控制台】输入 Install-Package Nuget.Server -Version 2.11.1 即可安装 nuget 相关服务,安装后我们的项目就会多一些文件,web.config也覆盖即可。具体这些是做什么的,我们不用管。
2.1 需要注意的是,这里Nuget.Server 有一定的依赖,所以我们要选择合适的版本,具体可以再这里看:http://www.nuget.org/packages/NuGet.Server/2.11.1
2.2 web.config 几个配置,安装成功后,会多如下几个配置
<add key="requireApiKey" value="true" /> 指示上传包到服务器是否需要apiKey,一般为true
<add key="apiKey" value="" /> 可以看做密匙,在上传包的时候要用到的
<add key="packagesPath" value="" /> 包的位置,默认是 ~/Packages
<add key="allowOverrideExistingPackageOnPush" value="false" /> 是否允许覆盖已存在的包,可以设置为true
2.3 安装后直接发布网站到iis即可,没错,就是这么简单!!!
3. 将nuget服务添加到nuget管理工具
选择【工具】->【库程序包管理器】-> 【程序包管理器设置】,然后把我们创建的服务站点加在这里
3.1 这里要注意有 /nuget 路径,具体可以看站点的路由代码。
这个时候我们在【引用】右键【管理Nuget程序包】这里就可以看到我们新增的服务了。接下来我们要做的就是把包放在这个服务里就行了。
4. 编写dll,上传到服务器
我们随便编写一个dll,然后使用包管理器 NuGetPackageExplorer 来发布,这里个可是化的包管理工具。
4.1 在NuGetPackageExplorer 【Edit】->【Edit Metadata】创建一个Package Metadata,这里可以填写dll的一些信息,大家看起来一看很熟悉的,如果我们的dll有其它依赖,也都可以在这里添加。其中Id 是比较重要的,就是我们安装时要用的,也就是 Install-Package XXX 这里的XXX。
4.2 接着在右边工作区右键新增一个Lib文件夹,再新增刚刚编写的dll
4.3 保存。这个时候会生成一个 .nupkg 的文件,可以把它看做是一个压缩文件,nuget就是依靠解析它来获取实际的dll文件的,我们实际需要也是这个文件,不需要具体的dll。接着在【File】->【publish】即可,这里默认是发布到nuget官网,我们需要去注册账号才能拿到key,不过我们也可以选择上面自己创建的站点,key就是配置文件的key。
这里可能会出现一个Not Allowed的错误,我们需要去【服务的Web站点】->【模块】,找到【WebDAVModel】 并删除它即可。
4.4 发布成功后,在站点的~/Packages 目录下就可以看到变化了。接下来就可以像添加其它引用一样用Nuget从我们自己的服务器添加引用了;也可以在控制太用命令Install-Package TestNugetServerDll 来安装。
总结
其中还有一些坑,踩到了解决就行了,百度也有很多资料。
使用Nuget管理dll的更多相关文章
- 转一篇dudu大人的文章:程序员,用NuGet管理好你的包包
每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”.这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的. 包包有个特点:容易坏,更新快, ...
- Nuget~管理自己的包包~丢了的包包快速恢复
之前写过一篇Nuget~管理自己的包包的文章,今天来讲Nuget的另一个东西,就是找回丢失的DLL,我们在引用包包后,在当前解决方案根目录就生成一个packages的目前,里面有我们从nuget下载的 ...
- Nuget~管理自己的包包
很久很久以前,自己就想有个包包,最近又从网上淘了一个,价格不便宜呢,99块,还是个小腰包,不过作工还算精良,我喜欢的类型,帆布休闲包,可以将我的手机,耳机,水,小烟,小酒,小伞都放里,方便至极,哈哈!
- 程序员,用NuGet管理好你的包包(转)
每个女人都有很多包包:其实男人也有,但只有会写程序的男人才有 —— 代码世界中的大“包”小“包”.这些大包小包,有花钱买的,有从开源市场淘的,也有自己或同事亲手制作的. 包包有个特点:容易坏,更新快, ...
- 使用NuGet管理项目类库引用
NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2012 ,VS2013中默认集成了N ...
- 使用 NuGet 管理项目库
使用 NuGet 管理项目库 Phil Haack 本文转载自:http://msdn.microsoft.com/zh-cn/magazine/hh547106.aspx 无论多么努力,Micros ...
- NuGet管理
使用NuGet管理项目类库引用 NuGet 是微软开发平台(包括.NET平台)的一个包管理器,这里只介绍和.NET相关的NuGet Visual Studio扩展客户端, 在VS2010 ,VS2 ...
- [Nuget]使用Nuget管理工具包
摘要 这里演示如何使用Nuget对类库进行打包,并将类库上传到nuget上面. 步骤 1.在nuget官网注册账号,并登陆. https://www.nuget.org 2.下载Nuget.exe,并 ...
- VS编译时使用/去除NuGet管理库
原文链接:VS编译时自动下载NuGet管理的库 之前一直使用NuGet来管理一些第三方的库,但是每次check in代码时候为了保证编译通过,都需要把对应的packages check in. 比较耗 ...
随机推荐
- sqlserver 设置外键
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, Id_P int, PRIMARY KEY (O_Id), FOREIGN ...
- [git] 细说commit (git add/commit/diff/rm/reset 以及 index 的概念)
http://kasicass.blog.163.com/blog/static/39561920133294219374/ 创建测试仓库 $ git init $ echo "line o ...
- Python3基础 用 函数递归求解 一个数字的阶乘
镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...
- UVa 10033 - Interpreter
题目大意:模拟题,有一些寄存器和随机访问内存,给你一些指令以及它们代表的操作,模拟操作即可. #include <cstdio> #include <cstring> #def ...
- Linux目录结构示意详解图
- js原生继承之——原型式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 用控制台命令拉取git最新仓库代码
C#利用Diagnostics 拉取最新代码 示例代码 static void DiagnosticTest() { Process p; ProcessStartInfo psi; psi = ...
- HDU-1879-继续畅通工程(并查集)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1879 这题做的我好尴尬,虽然自己做出来了,感觉也不难,不过怎觉得, 对这个最小生成树的理解,好像总隔了 ...
- double减法不准确的那些事儿
CREATE TABLE `helei` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `num1` double DEFAULT NULL ...
- 给Pomelo的聊天室添加time的RPC调用
为了练手,给聊天应用增加一个rpc调用和一个time类型的服务器,在servers/time/remote/timeRemote.js中,添加如下代码: module.exports.getCurre ...