你的团队需要一个正确的程序集(dll)管理姿势

很多团队经历时间的积淀之后,都会有很多的可重用的公共技术组件。大部分的团队都会把这些公共组件生成程序集(dll)后,放到GIT或SVN的一个公共目录里面,以供各个项目中使用。起初在项目很少又或者是公共组件不多的时候,这样看起来也没有多大问题。但是随着团队越来越大,项目的组件增多,所封装的可重用组件越来越多,一些问题就会慢慢暴露出来。这个时候如果还是使用这种方式去管理程序集,显然就不太合适了。

我们知道,在Java中比较常用的包管理工具,如Maven。实际上在很多大公司里面都会搭建自己公司的Maven私服,以管理公司的一些公共技术组件。

实际上在.net中也有,大家也绝对不陌生,就是Nuget, 相信每个人都从官方的nuget服务器上下载过一些第三方组件,如:log4net、quartz.net等等。

Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。这是维基百科中的定义,实际上Nuget就是一个包管理器,类似于Java的Maven,可以帮助我们更方便的管理dll,这也是微软提供给.net平台的一个正确的包管理工具。

而如Maven一样,Nuget也可以搭建自己的私服。这篇文章就来简单介绍一下如何搭建属于你们团队自己的Nuget服务器。

一、下载Nuget.Server

    从官方Nuget服务器上搜索nuget.server,点击项目url中的github路径。从github中下载nuget.server的源码。

下载并解压后的文件路径如下图所示:

二、搭建Nuget.Server

  1. 打开项目文件NuGet.Server.sln,找到NuGet.Server,右键发布,选择文件系统(跟发布web程序一样,发布到IIS中)。
  2. IIS新建站点MyNuGet

    启动程序出现以下页面代表搭建成功
  3. 注意:若点击here出现404页面如下图所示:

    可以通过VS运行起来Nuget.Server项目,然后将bin目录替换IIS下的bin目录,即可解决。出现下图代表搭建成功

    打开VS的Nuget管理器,点击图中设置图标,新建我们自己的nuget服务器

    之后就可以连上我们自己搭建的服务器了

三、自建NuGet基本使用

  1. 下载NuGet命令行打包工具nuget.exe
    下载地址:https://www.nuget.org/downloads

  2. 打包我们程序

  • 方式1:通过类库文件csproj的方式打包
    首先打开我们程序的AssemblyInfo.cs文件修改程序集信息

使用nuget.exe打包程序集

在.csproj文件目录下执行命令spec

nuget.exe spec //spec 在.csproj文件目录下执行命令


此时会生成一个.nuspec文件,打开这个文件
修改其中的xml属性即可(注意此处一些信息最好和AssemblyInfo.cs中的程序集信息一致)

修改完成后继续执行pack命令

这时将生成的.nupkg文件直接copy到nuget服务器IIS目录下的packages文件夹内即可
也可通过命令push推送至nuget服务器

nuget push *.nupkg -s http://127.0.0.1:8005 123456 //push 程序包路径 选项 地址 apikey
//apikey 可以在服务器webconfig中配置

完成后即可查看或使用我们发布的程序集

四、问题

如果你认为以上就结束了,那你就太天真了,实际上,我们团队在搭建与使用过程中还是遇到了很多问题的,如果搭建使用中踩到了同样的坑可以参考下面几点。

  1. 在刚开始使用的时候经常因为失误或者程序有问题从而导致需要重新发布nuget包,但是发现覆盖掉原来的之后,项目里更新下来的始终还是原来的程序。
    解决:慎重慎重再慎重打包,需要重新发布包的时候可以升级,不能覆盖。(当时认为这个东西只能升级不能覆盖)
  2. 用了一段时间后,由于当时至提供了nuget管理包的技术方案,却没有相应的使用规范与制度,导致团队nuget包混乱,开发人员胡乱升级,胡乱引用nuget包,终于有一天造成大问题。因此需要制定一个完善的使用规范与制度,包括如何打包,如何发布,谁来打包,谁来发布,慎重打包、升级、专人管理等
  3. 由于问题2引起的问题,因此决定重新整理nuget包(不破不立),于是重新搭建了一个nuget服务器,重新规整虽有的程序集、组件、重新打包发布等,但是发现迁移到新的后,项目中下载下来的程序集还是原来的。(又遇到了问题1)。这次灵感一来发现问题解决方案。VS2017通过工具->选项->清除所有NuGet缓存 再重新下载包问题即可解决

    若没有VS2017或找不到清楚NuGet缓存选项,也可找到自己机器上nuget的缓存文件夹删除掉里面对应的内容也可以,一般是在C:\Users\Administrator.nuget

小结

今天简单介绍了如何搭建自己团队的Nuget服务器,以及如何打包并发布程序集到Nuget。实际上,大多数的.net团队仍然是在用SVN或GIT的方式去管理dll,包括我所在的某大厂,虽然后来框架研发部,提供了一个自主研发的管理工具,但我个人感觉还是不如Nuget更好用一些。

如果你的团队不满足现在的程序集管理方式,那么不妨换个姿势,搭建一个属于你们团队自己的Nuget服务器吧!当然,如果你有更好的方式,欢迎与我留言分享!

posted @ 2020-05-13 08:45  随心所于  阅读(2229)  评论(13编辑  收藏  举报