在公司内部有很多基础框架或者基础组件,甚至对于使用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.

转自:http://www.cnblogs.com/lovecindywang/archive/2011/05/12/2044301.html

在内部架设NuGet服务器的更多相关文章

  1. 在内部架设NuGet服务器(转载)

    合肥程序员群:49313181.    合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入)Q  Q:408365330     E-Mail:egojit@qq.com 在公司内部有 ...

  2. 在内部架设NuGet服务器(转)

    在公司内部有很多基础框架或者基础组件,甚至对于使用SOA架构的公司来说,会有大量的业务组件的契约程序集,对于这些框架或组件的引用管理有的人使用源代码管理工具,但是NuGet相比源代码管理工具更方便: ...

  3. [转]超详细图解:自己架设NuGet服务器

    本文转自:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server 超详细图解:自己架设NuGet服务器 汪宇杰          ...

  4. 通过ProGet搭建一个内部的Nuget服务器

    .NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中各种组件的引用统统交给NuGet,添加组件/删除组件/以 ...

  5. 在VS中自动生成NuGet包以及搭建自己的或单位内部的NuGet服务器

    关于NuGet的介绍已经很多,可以参考下面的: NuGet学习笔记(1)--初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ NuGet学习笔记(2) ...

  6. 超详细图解:自己架设NuGet服务器

    原文:http://diaosbook.com/Post/2012/12/15/setup-private-nuget-server NuGet 是.NET程序员熟知的给.NET项目自动配置安装lib ...

  7. 用ProGet搭建内部的NuGet服务器

    最近团队内部用的一个很简陋的NuGet服务器出问题了,nuget push发包,客户端显示发布成功,服务器上就是没有.懶得再去排查这个问题,早就想换掉这个过于简陋的NuGet服务器,借此机会直接弃旧迎 ...

  8. 用ProGet搭建内部的NuGet服务器(更新安装步骤)

    以下是转自dudu的文章,但是我发觉时间的问题,他的安装方法已经不适用了,所以这里我更新了安装方法: 最近团队内部用的一个很简陋的NuGet服务器出问题了,nuget push发包,客户端显示发布成功 ...

  9. 搭建公司内部的NuGet服务器

    1.  创建NuGet项目      (注意:解决方案名称可以自定义为其他的名称)        2.   安装NuGet Server       在 “NuGetServer” 项目上,右键选择 ...

随机推荐

  1. 建站服务器的最优选择之Windows Or Linux

    转载于:http://www.0553114.com/news/detail-702287.html 不管是个人建站,还是中小型企业建站,选择一款合适的主机是站长朋友们共同的心愿.主机是选择Windo ...

  2. Convert.ToString和ToString的区别

    Convert.ToString能处理字符串为null的情况,不抛出异常. ToString方法不能处理字符串为null的情况,会抛出异常.如:“未将对象引用设置到对象的实例”.

  3. 安装使用adobe_photoshop_cs6

    1.先断开网络,安装官方原版PS程序. 2.在安装程序界面选择“试用”安装. 3.等安装完成后,退出程序. 4.复制破解补丁到安装路径覆盖,如:D:\Program Files\Adobe\Adobe ...

  4. sencha touch

    download http://www.sencha.com/products/touch/thank-you/ Developer Center http://developer.sencha.co ...

  5. cocos2dx3.4 解析json文件

    头文件: #include "json/document.h" #include "json/stringbuffer.h" #include "js ...

  6. C# and JSON

    JQuery Parse JSON var obj = $.parseJSON(data); C# creates JSON string: public static class JSONHelpe ...

  7. python中的reduce

    python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1 ...

  8. 为 UWP 应用提供的 .NET 网络 API

    [编者按]本文作者是 Windows networking 团队项目经理 Sidharth Nabar.在微软 Build 2015 大会上,.NET Core 5 作为开发 UWP(Universa ...

  9. No Pain No Game

    hdu4630:http://acm.hdu.edu.cn/showproblem.php?pid=4630 题意:给定一个排序,求区间最大GCD. 题解:离散树状数组.首先把查询按左端点从大到小排序 ...

  10. 【 NOIP2015 DAY1 T2 信息传递】带权并查集

    题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...