在内部架设NuGet服务器(转)
在公司内部有很多基础框架或者基础组件,甚至对于使用SOA架构的公司来说,会有大量的业务组件的契约程序集,对于这些框架或组件的引用管理有的人使用源代码管理工具,但是NuGet相比源代码管理工具更方便:
1) 安装和卸载:不需要手动添加和移除引用,不需要手动改写配置文件甚至是一些初始化服务的代码。版本升级也只需要执行一条命令。
2) 打包:多文件打包,支持依赖管理等,使用的人没有繁琐的配置。
对于官方的包,可以在http://www.nuget.org/ 找到,自己也可以提交包上去。但是如果不希望把包公开的话,可以在内部架设一个NuGet服务器。
下面介绍一下基本步骤以及如何进行打包。
1) 下载 NuGetServer.rar (包含源代码,改编自mceranski-nugetserver,找不到原始下载地址了)编译后,发布到内网服务器上。这个MVC3网站有几个功能:
一是提供Nuget的服务,提供所有包的信息,供VS2010中NuGet包管理器使用
二是提供了几个页面,可以上传包也可以浏览所有的包
三是提供了一个web服务,可以供程序在编译后自动上传包
2) 下载 Lib.rar (仅是可执行文件),解压缩到解决方案目录下的Lib目录中。这个压缩包里提供了两个程序:
一是官网提供的NuGet.exe小工具,可以打包文件称nupkg
二是自己写的一个上传包到NuGet服务端Web服务的小工具,这里是源代码,它会上传最新编译的那个包
3) 配置需要打包的项目的属性:

IF NOT "$(ConfigurationName)"=="Release" EXIT /B 0
IF NOT EXIST $(SolutionDir)ReleasePackages MD $(SolutionDir)ReleasePackages
$(SolutionDir)Libs\NuGet.exe Pack $(ProjectDir)$(ProjectName).nuspec -o $(SolutionDir)ReleasePackages\
$(SolutionDir)Libs\NuGetPackageUploader.exe $(SolutionDir)ReleasePackages\
这段脚本完成的功能是:
如果是Release方式编译的话,先创建ReleasePackages文件夹,然后调用NuGet.exe 打包,最后调用NuGetPackageUploader.exe 上传包
4) 在项目中创建[项目名].nuspec,包描述文件:
<?xml version="1.0" encoding="utf-8"?>
<package>
<metadata>
<id>WcfExtension</id>
<version>1.0.0.0</version>
<title>WcfExtension</title>
<authors>作者</authors>
<projectUrl>项目地址</projectUrl>
<description>A communication framework based on Wcf</description>
</metadata>
<files>
<file src="bin\Release\*.dll" target="lib" />
<file src="bin\Release\*.transform" target="content" />
</files>
</package>
在这里,我们把所有的dll打入包,并且还把用于转换配置文件的transform文件打入包。
为了自动在配置文件中增加节点,我们在项目文件下创建app.config.transform和web.config.transform,设置为:

文件内容和普通的配置文件无异:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
</configSections>
<appSettings>
<add key="configservice_address" value="192.168.129.11:1888/WcfConfigService.svc" />
<add key="logservice_address" value="192.168.129.12:1889/WcfLogService.svc" />
<add key="redis_address" value="192.168.129.175" />
<add key="redis_message_client_channel" value="WcfConfigClientChange"/>
<add key="redis_message_service_channel" value="WcfConfigServiceChange"/>
</appSettings>
<unity configSource="unity.config" />
</configuration>
5) 以release编译项目之后,可以发现ReleasePackages中多了一个包,并且这个包会上传到远程的NuGet服务端。

如果没有上传成功,请检查NuGetPackageUploader.exe.config中的地址是否修改为你部署的服务端的地址。
6) 在官网安装了VS2010的NuGet包管理器插件之后:

配置一下NuGet服务端地址应该就可以看到自己上传的所有包了:

如果你的网站部署到nuget.xxx.com,那么这里的地址填写nuget.xxx.com/nuget就可以了。
找到包点击Install按钮就可以安装上这个组件了。
打开包管理器控制台,输入get-help NuGet,可以看到其它的一些命令:
------------------ ----------------------------------------------
Get-Package Gets the set of packages available from the package source.
Install-Package Installs a package and its dependencies into the project.
Uninstall-Package Uninstalls a package. If other packages depend on this package,
the command will fail unless the –Force option is specified.
Update-Package Updates a package and its dependencies to a newer version.
New-Package Creates a new package when supplied with a Nuspec package specification file.
Add-BindingRedirect Examines all assemblies within the output path for a project and adds binding
redirects to the application (or web) configuration file where necessary.
Get-Project Returns a reference to the DTE (Development Tools Environment) for the active
or specified project.
在内部架设NuGet服务器(转)的更多相关文章
- 在内部架设NuGet服务器(转载)
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q Q:408365330 E-Mail:egojit@qq.com 在公司内部有 ...
- 在内部架设NuGet服务器
在公司内部有很多基础框架或者基础组件,甚至对于使用SOA架构的公司来说,会有大量的业务组件的契约程序集,对于这些框架或组件的引用管理有的人使用源代码管理工具,但是NuGet相比源代码管理工具更方便: ...
- [转]超详细图解:自己架设NuGet服务器
本文转自:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server 超详细图解:自己架设NuGet服务器 汪宇杰 ...
- 通过ProGet搭建一个内部的Nuget服务器
.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...
- 在VS中自动生成NuGet包以及搭建自己的或单位内部的NuGet服务器
关于NuGet的介绍已经很多,可以参考下面的: NuGet学习笔记(1)--初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ NuGet学习笔记(2) ...
- 超详细图解:自己架设NuGet服务器
原文:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server NuGet 是.NET程序员熟知的给.NET项目自动配置安装lib ...
- 用ProGet搭建内部的NuGet服务器
最近团队内部用的一个很简陋的NuGet服务器出问题了,nuget push发包,客户端显示发布成功,服务器上就是没有.懶得再去排查这个问题,早就想换掉这个过于简陋的NuGet服务器,借此机会直接弃旧迎 ...
- 用ProGet搭建内部的NuGet服务器(更新安装步骤)
以下是转自dudu的文章,但是我发觉时间的问题,他的安装方法已经不适用了,所以这里我更新了安装方法: 最近团队内部用的一个很简陋的NuGet服务器出问题了,nuget push发包,客户端显示发布成功 ...
- 搭建公司内部的NuGet服务器
1. 创建NuGet项目 (注意:解决方案名称可以自定义为其他的名称) 2. 安装NuGet Server 在 “NuGetServer” 项目上,右键选择 ...
随机推荐
- 【u248】交通序列号
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 在一条笔直的道路上共有N个路口,每个路口处都有关于该条道路的通行的信号灯. 显然,信号灯共有绿(G). ...
- 【跟我一起学Unity3D】代码中分割图片而且载入帧序列动画
在Cocos2dx中.对大图的处理已经封装好了一套自己的API,可是在Unity3D中貌似没有类似的API(好吧,实际上是有的,并且功能更强大),或者说我没找到. 只是这也在情理之中,毕竟Unity3 ...
- Spring+Netty+WebSocket实例
比较贴近生产,详见注释 一.pom.xml 具体太长,详见源码 </dependency> <dependency> <groupId>io.netty</g ...
- java之 ------ 枚举类型
枚举 一.枚举类型具体说明 简单的说.Enum一般用来表示一组同样类型的常量. 如性别.日期.月份.颜色等.对这些属性用常量的优点是显而易见的,不仅能够保证单例,且在比較的时候能够用"==& ...
- Android怎样捕获应用的crash信息
转载请注明出处:http://blog.csdn.net/fishle123/article/details/50823358 我们的应用不可避免的会发生crash,假设是在调试阶段,我们能够使用Lo ...
- 【源代码】Timer和TimerTask源代码剖析
Timer是java.util包中的一个工具类,提供了定时器的功能. 我们能够构造一个Timer对象,然后调用其schedule方法在某个特定的时间或者若干延时之后去运行一个特定的任务.甚至你能够让其 ...
- 《SAS编程与数据挖掘商业案例》学习笔记之十二
本次重点在:sas数据集管理 主要包含:包含数据集纵向拼接.转置.排序.比較.复制.重命名.删除等 1.append语句 注:base数据集和data两个数据集必须结构一样.避免使用force的情况, ...
- JAVA SkipList 跳表 的原理和使用例子
跳跃表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好. 关于跳跃表的具体介绍可以参考MIT的公开课:跳跃表 跳跃表的应 ...
- 我眼中的c++编程总结-20150602
断断续续的学习了非常多东西,有51.Avr.ARM.PLC.C\C++.C#.TB.MC.mql4.linux....等等,近乎填鸭或者囫囵吞枣的.甚至饿狼般的扑到里面,慢慢的积累和理解中,非常多知识 ...
- JavaEE分层知识点粗略解释
JavaEE知识点总结 什么是分层开发? 一种化大为小,分而治之的软件开发方法. 分层的特点: 1.每一层都有自己的责任. 2.上一层不用关心下一层的实现细节,上一层通过下一层 提供的对外接口来使用其 ...