gpt4 book ai didi

c# - 管理存在于多个解决方案中的 C# 项目的 Nuget 包

转载 作者:行者123 更新时间:2023-12-05 05:11:50 24 4
gpt4 key购买 nike

我现在正处于一个大项目的疯狂重构阶段,该项目有很多遗留和不稳定的模块。我决定拆分解决方案,目前所有项目(大约 20 个,而且还会有更多,因为单元测试项目肯定会在下个月出现)链接在其中以使其更加独立和颗粒状的。

使用这种方法有模块,例如需要在多个解决方案中引用或添加的 API 客户端。

问题是 Nuget 包只能在最初首次添加的解决方案上恢复。所以最简单的例子:

解决方案 A:

------ 项目A

------ API客户端

解决方案 B:

------ 项目B

------ API客户端

由于我们不包括 packages 文件夹,它会导致 Nuget 包出现问题:

  1. 克隆存储库。

  2. 打开解决方案 B,构建它并恢复解决方案的 Nugets。

  3. 解决方案 B 中的 ClientAPI 包错误。

  4. 转到解决方案 A 构建它并恢复解决方案的 Nugets

  5. 回到解决方案 B。

  6. 在解决方案 B 中为 ClientAPI 恢复了 Nuget,错误消失了。

有什么办法可以:

  • 让项目对每个解决方案使用不同的路径?
  • 也许在构建过程中将解决方案链起来,使解决方案 A 始终与解决方案 B 一起构建?但这听起来像是失去了将这一大解决方案拆分为较小解决方案的一些好处。
  • 使用任何其他方法使其更细化,但不会因为需要重建所有内容而遇到问题?我听说过私有(private) Nuget 提要,如果我的配置允许的话,这会是这个问题的答案吗?

我的配置:

  • VCS:带有 TFVC 的 TFS
  • IDE:Visual Studio Proffesional 2017
  • 默认包管理格式:Packages.config

最佳答案

Managing Nuget packages for C# project present in multiple solutions

感谢您的回复。我用两个解决方案重现了这个问题,SolutionA与项目 APIClient .和 SolutionB , 添加现有项目 APIClientSolutionASolutionB .

然后如果我们在 SolutionB 上恢复 nuget 包, 包在项目中 APIClient在 SolutionB 中将在 \packages 中恢复文件夹默认在 SolutionB 文件夹中,而不是在 SolutionA 中文件夹。

在本例中,项目 APIClient仍然缺少 .dllSolutionB 中引用, 你还得去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.configpackagereference对于项目 APIClient ,使用此设置,nuget 包将保存在全局包文件夹中,C:\Users\<UserName>\.nuget\packages .

希望这对您有所帮助。

关于c# - 管理存在于多个解决方案中的 C# 项目的 Nuget 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55038882/

24 4 0
文章推荐: python - 如何强制 NumPy 始终使用精度(float32、float64 ...)?
文章推荐: amazon-web-services - 解析在 AWS Athena/AWS Glue 目录中的一列中包含换行符的 csv 文件
文章推荐: javascript - 简单的搜索栏,显示
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com