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

问题描述 投票:1回答:2

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

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

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

解决方案A:

------ ProjectA

------ APIClient

解决方案B:

------ ProjectB

------ APIClient

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

  1. 克隆回购。
  2. 打开解决方案B,构建它并恢复Nuget以获得解决方案。
  3. 解决方案B中ClientAPI包的错误。
  4. 转到解决方案A构建它并恢复Nuget以获得解决方案
  5. 回到解决方案B.
  6. 在解决方案B中为Client API恢复了块,并且错误消失了。

有办法以某种方式:

  • 为每个解决方案使用不同的路径创建项目?
  • 也许链接解决方案在构建中使解决方案A始终使用解决方案B构建?但这听起来好像失去了将这一大解决方案拆分为较小解决方案的一些好处。
  • 使用任何其他方法使其更精细,但不会遇到重建所有问题的必要性的问题?我听说过私人Nuget提要,如果我的配置允许,那会是这个问题的答案吗?

我的配置:

  • VCS:TFS与TFVC
  • IDE:Visual Studio Professional 2017
  • 默认包管理格式:Packages.config
c# visual-studio build nuget projects-and-solutions
2个回答
1
投票

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

谢谢你的回复。我用两个解决方案复制了这个问题,SolutionA和Project APIClient。和SolutionB,将APIClient现有的项目SolutionA添加到SolutionB

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

在这种情况下,项目APIClient仍然缺少.dll中的SolutionB参考,你仍然必须去SolutionA并恢复nuget包。这就是你遇到这个问题的原因。

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

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

所以,\packages文件夹与解决方案文件无关。

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

希望这可以帮助。


0
投票

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

你用什么包装模式?


如果使用“程序包引用”模式,则必须在解决方案B的csproj中添加程序包信息。

如果使用“程序包配置”模式,则必须在解决方案B的package.config文件中添加程序包信息。

© www.soinside.com 2019 - 2024. All rights reserved.