c# - 管理多个解决方案中存在的 C# 项目的 Nuget 包
问题描述
我现在正处于一个大项目的疯狂重构阶段,该项目有很多遗留和不稳定的模块。我决定拆分当前包含所有项目的解决方案(大约 20 个,因为单元测试项目肯定会在下个月出现,所以会有更多)链接在其中,以使其更加独立和细化。
使用这种方法,有一些模块,例如 API 客户端,需要在多个解决方案中引用或添加。
问题是 Nuget 包仅在最初首次添加的解决方案上得到恢复。所以最简单的例子:
解决方案 A:
------ 项目A
------ API客户端
解决方案 B:
------ 项目B
------ API客户端
由于我们不包括包文件夹,因此会导致 Nuget 包出现问题:
克隆回购。
打开解决方案 B,构建它并恢复 Nugets 以获得解决方案。
解决方案 B 中的 ClientAPI 包错误。
转到解决方案 A 构建它并恢复 Nugets 以获得解决方案
回到解决方案 B。
在解决方案 B 中为 ClientAPI 恢复了 Nuget,并且错误消失了。
有没有办法以某种方式:
- 使项目对每个解决方案使用不同的路径?
- 也许在构建中链接解决方案以使解决方案 A 始终与解决方案 B 一起构建?但这听起来失去了将这一大解决方案拆分为较小解决方案的一些好处。
- 使用任何其他方法使其更细化,但又不会因需要全部重建而遇到问题?我听说过私人 Nuget 提要,如果我的配置允许,这是否可以解决这个问题?
我的配置:
- VCS:带 TFVC 的 TFS
- IDE:Visual Studio 专业版 2017
- 默认包管理格式:Packages.config
解决方案
管理多个解决方案中存在的 C# 项目的 Nuget 包
谢谢你的回复。我已经SolutionA
用 Project两种解决方案重现了这个问题APIClient
。并且SolutionB
,将现有项目添加APIClient
到.SolutionA
SolutionB
那么如果我们恢复上的nuget包SolutionB
,SolutionB中项目APIClient
中的包会默认恢复\packages
到SolutionB文件夹下的文件夹中,而不是SolutionA
文件夹中。
在这种情况下,项目APIClient
仍然缺少 中的.dll
引用SolutionB
,您仍然需要去SolutionA
恢复 nuget 包。这就是你遇到这个问题的原因。
要解决此问题,您可以在NuGet.Config
旁边添加一个文件SolutionA
,SolutionB
其中包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="C:\Packages" />
</config>
</configuration>
因此,该\packages
文件夹与解决方案文件无关。
此外,如果您有兴趣,可以尝试将项目转换为packages.config
,使用此设置,nuget 包将保存在全局包文件夹中,.packagereference
APIClient
C:\Users\<UserName>\.nuget\packages
希望这可以帮助。
推荐阅读
- firebase - 无法从 Firestore 数据库中获取数据
- javascript - Vue.js 选择多个值
- tensorflow - 批处理、重复和随机播放对 TensorFlow 数据集有什么作用?
- linux - 在bash中捕获没有换行符的程序输出
- android - Firebase 动态链接不跟踪应用安装
- cmd - 在 CMD 中重命名多个文件名
- junit - mock.method 调用在存根后返回 null
- mysql - 如何搜索具有恒定值的最大 id
- javascript - 猫鼬选择查询同一天的两个时间范围或根据坐标跨越午夜的时间
- konvajs - 如何仅从内部形状而不是从组的其他区域拖动 Konva JS 中的组?