1、缘起

在我们的项目中。须要引用的组件统一放在一个 Libs 文件夹下。不管对于平台上的公共组件。还是应用模块,都是如此。

假设一个应用模块,比如能源管理(EM)。要引用平台提供的公共组件,比如数据库訪问(Platform.PL)。那么不但要把Platform.PL程序集复制到EM的Libs文件夹下,也要把Platform.PL所引用的程序集。也就是Platform.PL的Libs文件夹下的文件。复制到EM的Libs文件夹下。

随着平台上应用模块的增多,Platform.PL被引用得也越来越多。我们是怎么把Platform.PL自身及其Libs下的程序集给到这些应用模块的呢?是通过手工拷贝的方式。

那么问题来了——Platform.PL升级了怎么办?答案是,仅仅能一一手工拷贝了。

这样的做法非常老土,并且由于手工拷贝,easy出错。最好是把共用组件放到server上,应用模块引用或升级时就去server上下载或更新。实际上,业界已经这么做非常久了。就是用 NuGet 获取程序集。

仅仅是这些程序集普通情况下都是公开的,比如 NHibernate、Spring.Net等等。我们能够使用 NuGet 的机制,并且把共用的程序集放到内部的server上。

因此,这里介绍的,不是怎么用 NuGet 来管理一个解决方式所使用的程序集,而是怎么把我们自己开发的公共组件放到内部的server上,让其它模块下载、更新。

顺带说一下开发环境,当然是 .NET 了,Visual Studio的版本号是 2012。这个版本号已经缺省安装了 NuGet 包管理器。

2、准备待公布的程序集

开发好公共组件后。要将其公布到 NuGet server上,须要做些准备工作。

0. 下载 NuGet.exe。地址在这里。这是一个控制台程序,以后要在命令行以下执行。下载后。将其放到一个合适的位置,并用path指向这个位置。当然,这个文件仅仅须要下载一次。

1. 创建清单文件。

打开命令行程序。进入公共组件所在项目的目录,执行 nuget spec。

就像以下这样:

这样就会创建一个文件:Platform.PL.nuspec。打开这个文件,会看到是这个样子的:

<?

xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl> <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl> <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>Summary of changes made in this release of the package.</releaseNotes> <copyright>Copyright 2014</copyright> <tags>Tag1 Tag2</tags> </metadata> </package>

当中有些内容是不须要的,能够删除它。licenseUrl。projectUrl,iconUrl,都能够删掉,反正它提示我们删掉。

releaseNotes和tags一定要改动。否则下一步会出现警告。

比如,我把这个文件改动成这样:

<?

xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <releaseNotes>MES平台数据库訪问组件首次公布到NuGetserver上</releaseNotes> <copyright>Copyright 2014</copyright> <tags>MES平台 数据库訪问</tags> </metadata> </package>

2.打包。在上面的命令行界面下,执行 nuget pack,像以下这样:

这样就会创建一个文件 Platform.PL.xyz.nupkg。这就是我们将要公布到NuGetserver上的包。

有一种情况值得一提:由于某种原因,我们不得不使用spring.net的预发行版(pre-release)。好奇么?这个原因就是,spring.net在并发环节使用了Dictionary,而这个类不是线程安全的,导致在执行时出现故障。spring.net在预发行版 2.0.0-RC1攻克了这一问题,但还没有出稳定(Stable)版。所以我们就使用这个预发行版了。

nuget有一项规定:假设使用了非稳定版的程序集,所公布的程序集就不能是稳定版本号。否则,打包是就会出现这种错误:

为此。须要将我们要公布的包设置为測试版或预发行版。做法是手工编辑所在项目的 Properties/AssemblyInfo.cs 文件:

当中的36行就是我们加进去的。

3、将程序集公布到内部server上

经过上一步。我们生成了要公布的包:Platform.PL.3.1.0-alpha.nupkg。

这个包能够公布到公共的NuGetserver上,供全部人下载。但如今我们不想这么做。我们仅仅是公布到内部server上,仅供项目组内部使用。

要做到这一点,我们首先要创建一个站点。用常规的方法创建IIS站点,能够给这个站点起名为 NuGetServer。

其次,我们要创建一个Web应用。

利用VS,创建一个 ASP.NET空Web应用程序。

能够给这个项目起名为 NuGetServer。

再次,在这个应用程序中,用 NuGet 加入 NuGet.Server 包引用:

引用了NuGet.Server包以后。会自己主动增加非常多它引用的包。

再再次,将我们刚创建的 Platform.PL.3.1.0-alpha.nupck 文件,增加到这个Web项目的packages目录中:

最后,将这个应用公布到站点 NuGetServer 中就能够了。

公布成功后,打开这个站点,能够看到类似这种内容:

4、引用程序集

将程序集在内部NuGetserver上公布成功后,就能够将其引用到应用模块中了。

在应用模块引用之前,还须要做一件准备工作:将server加入到NuGet配置中。

在VS 2012中,点击菜单 工具 --> NuGet程序包管理器 --> 管理解决方式的NuGet程序包,在弹出的对话框中,点击左下角的“设置”button,会弹出“选项”对话框。点击右上角的大加号,能够加入“可用程序包源”,将上面ie提示的地址。如http://localhost:8010/nuget。加入上去就能够了。能够起名字为mes:

至此,就能够像从公共NuGetserver上下载程序集一样。从内部的NuGetserver上下载我们自己的程序集了。

5、其他

这个帖子的标题带有“预发行版”。表示这个做法刚实验通过。真正用起来。应该会面临诸多意想不到的问题。即便如此,也推荐使用。

建议我们的项目组:

1、摈弃用Libs管理所引用的程序集。转用 NuGet 下载程序集的方式;

2、MES平台搭建统一的 NuGet server;

3、公共组件统一公布到 NuGet server上,并參考语义化版本号的方式设置版本号号。



转载于:https://www.cnblogs.com/bhlsheji/p/5397675.html

使用 NuGet 管理我们的程序集 - 预发行版相关推荐

  1. Win10预发行版5个密钥曝光!激活就靠它

    俄罗斯爆料大神WZor这两天非常给力,接连送出Windows 10的相关猛料.现在,他甚至给出了Windows 10预发行版的产品密钥. 从WZor曝光的图片来看,微软共准备了五个密钥,分别对应Win ...

  2. Delphi/Object Pascal开源跨平台3D和2D(台式机,移动设备,游戏主机)游戏引擎Castle Game Engine正式发布7.0预览版

    Castle Game Engine,是一种用于3D和2D游戏的开源跨平台(台式机,移动设备,游戏机)游戏引擎.我们的目标是创建一个功能强大的游戏引擎,该引擎完全免费且永远开源. 我们支持许多3D和2 ...

  3. centos7-15-Linux的发展史和主流发行版系列

    Linux发展史简述 一般我们说的Linux版本有2个,一个是Linux内核版本,一个是各厂商的发行版本. 1 Linux的发展 Linux是一套开源的操作系统,于1991年10月5日正式对外发布.它 ...

  4. 主流Kubernetes发行版梳理,看完就会选了

    Kubernetes的开源性质及其受欢迎程度催生了容器管理平台的许多不同发行版. 2014年,Kubernetes作为内部Google orchestrator Borg开源版本推出,目前已是最成功和 ...

  5. Linux发行版之间有什么区别?

    文章目录 Linux发行版之间的5个主要区别 1 桌面环境 2 软件包管理器 3 Linux上的不同显示服务器 4 目标和宗旨 5 开源与专有哲学 所有发行版的共同点:Linux内核 利用Linux的 ...

  6. Linux 发行版的组件是什么?

    Linux 发行版的组件是什么? 一.Linux组件简介 二.Linxu主要组件 1.Linux Kernel 2.GNU 工具 3.显示服务器或视窗系统 4.显示管理器 5.守护 进程 6.包管理器 ...

  7. vs2019 预览版发行说明--转载自微软官网(不定期转载更新)

    vs2019已于4月2日推出,安装教程链接: vs2019安装和使用教程(详细) 2019/04/10  Visual Studio 2019 预览版发行说明 | 开发者社区 | 系统要求 | 兼容性 ...

  8. 使用NuGet管理C++项目的依赖库

    一.NuGet介绍 使用C++进行开发的同学,一定很羡慕Python的pip.Java的Maven等包管理器,只需要一个命令就可以将工程需要的依赖库安装到位.由于C++的大多数库都是系统.编译环境强相 ...

  9. linux发行版 以及 包管理方式

    linux发行版 以及 包管理方式 2010-07-26 14:24:41 分类:  linux 发行版 Debian --- Debian Project诞生于1993年8月13日,它的目标是提供一 ...

最新文章

  1. Ubuntu 上创建常用磁盘阵列
  2. cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
  3. 猫猫学IOS(二十四)UI之注册案例
  4. SAP BI基本概念
  5. Windows 32位程序在64位操作系统下运行
  6. Flex embed XML and Icon
  7. Freemarker 内置函数 数字、字符串、日期格式化用法介绍
  8. fun(n) Java_java程序员的kotlin课(N+2):suspending函数执行编排
  9. Android应用程序之间共享文字和图片(一)
  10. Actor-ES框架:Ray-Handler之ToReadHandler编写
  11. java switch 不加 break 继续执行 下一个case(不用匹配条件) 这个设计是为什么
  12. 虚拟机管理解决方案逐个看:微软篇
  13. dojo实现省份地市级联报错(一)
  14. 基于 AWS 的一站式分布式数据库测试体系,简单易上手|TiDB Hackathon 2020 优秀项目分享
  15. Eclipse官方下载步骤
  16. Ubuntu下安装小企鹅fcitx输入法
  17. 一起认识国产又好用的uni-app
  18. doom主程序员相关文章
  19. 基于MSP430单片机的简单门禁系统
  20. SQL 多表联合查询,收藏直接起飞!

热门文章

  1. 局域网共享文件夹设置
  2. 谈谈 ForkJoin 框架的设计与实现
  3. 炸!业界难题,跨库分页的几种常见方案
  4. 服务部署如何做到高可用?这份“三级跳”秘籍送给你
  5. 【手写系列】对HashMap的思考及手写实现
  6. 33.向vector里面添加数字,换行敲下输入结束
  7. Android --- TabLayout 每一个选项卡前面加图标
  8. tomcat 终止端口号时 taskkill /pid 17292 /f 中/f是什么意思
  9. php中new运算符的作用,C++_C++编程中new运算符的使用学习教程,new运算符用作从自由存储为 typ - phpStudy...
  10. 内蒙古电力交易对数据中心用电费用的影响分析