.NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器
使用NuGet.Server搭建公司内部的Nuget(包)管理器
前言
Nuget是一个.NET平台下的开源的项目,它是Visual Studio的扩展。在使用Visual Studio开发基于.NET Framework的应用时,Nuget能把在项目中添加、移除和更新引用的工作变得更加快捷方便。这是维基百科中的定义,实际上Nuget就是一个包管理器,类似于Java的Maven,可以帮助我们更方便的管理dll。
相信每个人都从官方的nuget服务器上下载过一些第三方组件。如:log4net、quartz.net等。实际上随着公司业务慢慢的拓展,项目也会越来越来多,很多项目会依赖其他项目DLL,比如一些底层的技术组件项目多,交叉引用多,这个时候对这些DLL的管理就至关重要。起初我们公司的方案是把这些公共的组件放到SVN的一个目录下,然后大家更新到本地,然后添加引用到项目里。这种方式管理起来较为复杂,而且必须要求所有项目人员的SVN更新路径必须是一致的。起初项目较少,项目之间没什么依赖,可重用的组件也不多,用起来没什么问题,但随着项目越来越多,可重用的组件也越来越多,引用越来越复杂,这个时候这些组件管理起来就很吃力了。
以上问题并没有意识到,我是在做Jenkisn持续集成与自动化发布的时候发现Jenkins把SVN更新到自己的工作空间内时,并不能更新到这些依赖的组件(因为这些公共的组件不在项目的SVN工作目录内),导致构建失败的时候,苦思良久才想到搭建我们公司自己的Nuget服务器,来管理这些组件的。等真正用起来之后才觉得,可能正规军都这么玩,我们之前那种方式只是野路子。
系列文章
一、下载Nuget.Server
从官方Nuget服务器上搜索nuget.server,点击项目url中的github路径。从github中下载nuget.server的源码。

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

二、搭建Nuget.Server
- 打开项目文件NuGet.Server.sln,找到NuGet.Server,右键发布,选择文件系统(跟发布web程序一样,发布到IIS中)。

- IIS新建站点MyNuGet

启动程序出现以下页面代表搭建成功

- 注意:若点击here出现404页面如下图所示:

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

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

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

三、自建NuGet基本使用
下载NuGet命令行打包工具nuget.exe
下载地址:https://www.nuget.org/downloads打包我们程序
- 方式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中配置
完成后即可查看或使用我们发布的程序集


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

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

.NET持续集成与自动化部署之路第二篇——使用NuGet.Server搭建公司内部的Nuget(包)管理器的更多相关文章
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
- .NET持续集成与自动化部署之路第三篇——测试环境到生产环境的一键部署策略(Windows)
Jenkins测试环境到生产环境的一键部署策略(Windows) 一.前言 前面我们已经初步实现了开发集成环境.测试环境的持续集成(自动化构建.自动化测试.自动化部署).但生产环境自动化部署迟 ...
- NET持续集成与自动化部署
https://www.cnblogs.com/hunternet/p/9590287.html 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们 ...
- .NET 半天搭建Jenkins持续集成与自动化部署系统
前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛.由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,由 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(二):部署
前面又是废话 我之前写过: Asp.Net Core 程序部署到Linux(centos)生产环境(一):普通部署 Asp.Net Core 程序部署到Linux(centos)生产环境(二):doc ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用d ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新 ...
- Jenkins持续集成-自动化部署脚本的实现
要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...
随机推荐
- git本地仓库关联多个remote,怎么用本地一个分支向不同remote不同分支推送代码
我想这个问题,是大家关注的问题,这个问题,我非常关注. 背景:在公司开发项目,我们一般都要把项目推送到公司领导创建的一个远程仓库里边去,但是我们同时也有自己的小仓库,这样的话,如何方便的将我们的代码, ...
- Fragment 中 ListView绑定ContextMenu
package com.example.administrator.imbobo.controller.fragment; import android.content.BroadcastReceiv ...
- genymotion和adb的解决方法
问题: 安装了genymotion后.再单独安装了adb 然后在关闭genymotion后,输入adb devices,下方显示为空,然后打开genymotion,cmd输入adb devices,显 ...
- 第四周读书笔记——读《我是一只IT小小鸟》有感
读<我是一只IT小小鸟>有感 这是邓老师倾力推荐的一本书.这本书的标题化用了我们耳熟能详的歌词,算是较有新意吧.更重点在于,这本书的作者不是哪一位大牛,而是一群刚刚走出校 ...
- Configure Monit on AWS CentOS7 to guard Squid proxy
Install Monit:sudo -iamazon-linux-extras install epelyum -y install monit Config monit: vim /etc/mon ...
- Jenkins修改workspace和build目录
Jenkins: Change Workspaces and Build Directory Locations 转自: http://ingorichter.blogspot.jp/2012/02 ...
- Mac下配置apache
一.前言 今天遇到问题,怎么配置apache在Mac上,原来Mac自带apache,只需要自己开启配置一下就行了. 二.步骤: 1.修改apache的http_conf文件 打开finder前往/pr ...
- JDBC学习笔记之建立连接
1. 引言 在一个JDBC应用程序中,如果想建立和数据源的连接,那么可以使用以下两个类: DriverManager:通过数据源的URL,我们可以建立与指定的数据源的连接.如果使用 JDBC 4.0 ...
- EasyUI设置选中复选框
//设置选中 $('#isBind').prop('checked', true); //获取是否选中 var isChecked = $('#isBind').prop('checked'); if ...
- Xmind破解
原始教程 http://df1551e3.wiz03.com/share/s/3v5l7z2wdQVs2llAUc0C_-n_2cPZVe0kEA2n2iw1Ay1ApF_o