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

Managing Nuget packages for C# project present in multiple solutions

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

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

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

解决方案 A:

------ 项目A

------ API客户端

解决方案 B:

------ 项目B

------ API客户端

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

  1. 克隆存储库。

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

  3. 解决方案 B 中客户端 API 的包错误。

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

  5. 返回解决方案 B。

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

有什么办法吗:

我的配置:

为什么不在方案B中添加包?

你用的是什么打包模式?


如果使用"Package reference"模式,必须在方案B的csproj中添加包信息

如果使用"Package config"模式,必须在方案B的package.config文件中添加包信息。

Managing Nuget packages for C# project present in multiple solutions

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

那么如果我们恢复SolutionB上的nuget包,SolutionB中项目APIClient中的包将恢复到中的\packages文件夹中默认情况下,SolutionB 文件夹而不是 SolutionA 文件夹。

在这种情况下,项目 APIClient 仍然缺少 SolutionB 中的 .dll 引用,您仍然必须转到 SolutionA 并恢复 nuget 包。这就是您遇到该问题的原因。

要解决此问题,您可以在 SolutionASolutionB 旁边添加一个 NuGet.Config 文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="C:\Packages" />
  </config>
</configuration>

因此,\packages 文件夹与解决方案文件无关。

此外,如果你有兴趣,你可以尝试将项目APIClientpackages.config转换为packagereference,使用此设置,nuget包将保存在全局包文件夹,C:\Users\<UserName>\.nuget\packages

希望这对您有所帮助。