NuGet多个项目依赖的公共组件如何打包

会有这样一种情况:在同一个解决方案下面,类库A是独立的,类库B是依赖于类库A的;类似这样:

所以在使用类库B时必须引入类库A的东西,这时如果作为nuget包打包发布,有如下的解决思路:

1、在整个解决方案上的引用上全部依托nuget进行引入,比如类库A开发好之后,直接打包发布到官网,然后类库B要依赖类库B的时候,直接用nuget安装类库A;那么这时项目上就会多出packages.config的文件,当我们打包类库B时,用命令行直接打包会带上这些依赖,非常方便的包含进去了。当我们在官网下载类库B安装时,会自动的安装上类库A。但这样的方式也有非常不好的一个特点:就是项目联调时无法断点跟踪成了一种难题(可能存在的几种情况,也是不推荐的:①带上pdb文件。②使用symbols服务器,小类库真没必要),尤其是解决方案上自带了单元测试的项目,也是非常痛苦的!

2、类库B还是同样的老方式引用类库A,那么用nuget打包时就要这样处理,先用spec参数生成nuspec文件,然后编辑里面的文件,加上类库A的引用依赖。这样一来,再使用pack进行打包时也能达到第1种的效果。缺点:多了一个配置文件要进行编辑,也多了一步的命令行操作,对于自动化的批处理操作不太合适。优点:断点跟踪,单元测试断点跟踪一目了然,方便调试。

3、这种是一种投机取巧的方式,项目上还是这样操作:类库B还是同样的老方式引用类库A,类库A编译好并发布到官网上,然后再类库B上新建一个packages.config或者在原有的packages.config文件上加入要引入类库A的ID和版本号。我这里不直接使用nguet的管理器进行安装,而是手动写入到packages.config文件,好处是不会直接引用,关系还是在的,只不过是用pack参数打包时能自动引入类库A的依赖;同时这样的好处也非常明显,不用维护nuspec文件,一条命令行打包自带依赖关系,同时也方便调试和单步跟踪,也不破坏项目之间的引入关系。(推荐使用这个

注意:

这里的nuget官网是:http://nuget.org,如果你有内部服务器也可以是自动的内部服务器,内部服务器对于第2部的symbols的调试也是可以的,但不推荐用symbols的形式去调试公共库,业务项目就推荐用symbols。

时间: 2024-11-04 10:16:48

NuGet多个项目依赖的公共组件如何打包的相关文章

使用了旧版nuget的.net项目在git中的问题

曾几何时,使用nuget包管理项目依赖还需要将nuget执行程序及其配置文件包含在项目中. 如上图所示,在解决方案文件夹中,有专门为nuget程序设置的 .nuget 子目录. 当将项目纳入git管理后,nuget.exe的体积庞大(1.6M),应当从管理项中忽略掉. 但是当用户拷贝git库时,由于缺少这些文件,.net项目加载会出现问题,例如无法获取项目属性.找不到引用的库等. 这些问题的原因,是在.net项目文件中引用了nuget.targets,而这些文件在更新的nuget管理中并不是必须

Net Core 的公共组件之 Http 请求客户端

Net Core 的公共组件之 Http 请求客户端 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开始讲解对于 Http 请求客户端的简单封装. 首先,说一个好消息 就是 .Net Core 已将之前的 System.Net.Http 组件默认添加到了 NETStandard.Library 库中,所以直接用就好了,不需要再额外在 Nuget 上安装了,说道 Nuget 后续

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构

一个技术汪的开源梦 —— 目录 这篇文章是开源公共组件的开篇那就先说说项目的 Github 目录结构和 .Net Core 的项目结构. 1. GitHub 目录结构和相关文件 - src 源码项目目录. - test 单元测试项目目录. - tools 工具目录. - .gitignore 你想要忽略的文件或者目录(一些文件诸如 *.dll.testResults 等 不需要提交到 github 上的文件)详情:https://git-scm.com/docs/gitignore. - .gi

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端

一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开始讲解对于 Http 请求客户端的简单封装. 首先,说一个好消息 就是 .Net Core 已将之前的 System.Net.Http 组件默认添加到了 NETStandard.Library 库中,所以直接用就好了,不需要再额外在 Nuget 上安装了,说道 Nuget 后续计划会有一篇文章介绍

(一)公共组件之骨架工程

前言 公司为统一应用程序开发环境,简化开发管理成本,提高开发质量,可以考虑开发统一的框架和工具.骨架工程基于MAVEN项目管理,提供了搭建项目必要使用的几个骨架组件.在这些骨架组件中,基本的依赖和基本设置都在模板中做好,无需各项目重复工作,比如集成了统一开发的数据库操作组件.redis操作等基础组件.项目开发组在这个框架的基础上,根据自己的实际需要增加或者裁减组件的配置并编写自己的应用,这样既能统一项目设置和架构,又能大量节省开发人员搭建框架的时间. 1.系统框架结构简介 我采用的Framewo

项目之间的公共库引用和联调方法整理

很多时候我们在搭建每个项目框架的时候,总会有些公共的类库需要引用,如果每个项目都引入源码,会出现这样的情况:某个项目更新了公共类库,那么每个项目引用过的都需要再拷贝代码同步(可以使用Beyond Compare对比然后进行修改,总的来说项目一多,时间一久就会很乱且用的时间越多,非常不靠谱!):所以下面我研究了几种方式: 1.[这个好处是最多的,联调.最新修改的代码都解决了]如果公司使用的SVN(git的方式差不多),那么可以用svn的external功能,在每个项目上用external迁出公共库

android studio学习----添加项目依赖包总结

Gradle Library Projects Gradle 项目可以依赖于其它组件.这些组件可以是外部二进制包,或者是其它的 Gradle 项目. 在本例中, app/build.gradle 中有以下内容: dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:appcompat-v7:21.0.3'compile project(':library')compi

一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化

一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON 或者 XML . 大家在项目中应该都看到过这样的工具类 例如 ***XmlHelper.***JsonHelper 等,没错这一些助手类会帮助我们重复造轮子.既然是组件并且还是是开源的必须考虑每个功能的后续可扩展性以及易用性. ISerializer 序列化者接口 1 using System; 2

iOS 使用CocoaPods管理私有库的公共组件

最近要使用私有公共组件,故,有了如下的故事. 参考地址: http://www.cocoachina.com/ios/20150228/11206.html 本文使用 https://coding.net 作为Git私有库地址.步骤如下: 1. 创建一个私有的Git 仓库.(例如:SKPodsStart,创建后地址:https://git.coding.net/LeouCC/SKPodsStart.git 2. 添加一个私有Spec Repo到本地,终端命令如下:pod repo add [Sp