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

问题描述

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

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

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

解决方案 A:

------ 项目A

------ API客户端

解决方案 B:

------ 项目B

------ API客户端

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

  1. 克隆回购。

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

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

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

  5. 回到解决方案 B。

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

有没有办法以某种方式:

我的配置:

标签: c#visual-studiobuildnugetprojects-and-solutions

解决方案


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

谢谢你的回复。我已经SolutionA用 Project两种解决方案重现了这个问题APIClient。并且SolutionB,将现有项目添加APIClient到.SolutionASolutionB

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

在这种情况下,项目APIClient仍然缺少 中的.dll引用SolutionB,您仍然需要去SolutionA恢复 nuget 包。这就是你遇到这个问题的原因。

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

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

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

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

希望这可以帮助。


推荐阅读