为多种解决方案中的C#项目管理Nuget软件包

时间:2019-03-07 08:08:38

标签: c# visual-studio build nuget projects-and-solutions

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

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

问题在于,Nuget软件包仅在首次添加时才被还原。所以最简单的例子:

解决方案A:

------ ProjectA

------ APIClient

解决方案B:

------ ProjectB

------ APIClient

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

  1. 克隆存储库。

  2. 打开解决方案B,对其进行构建并还原Nugets作为解决方案。

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

  4. 转到解决方案A进行构建,然后还原Nugets作为解决方案

  5. 回到解决方案B。

  6. 在解决方案B中为ClientAPI还原了螺母,并且错误消失了。

有什么办法吗?

  • 使每个解决方案的项目使用不同的路径吗?
  • 也许正在构建链式解决方案以使解决方案A始终与解决方案B一起构建?但这听起来失去了将这一大解决方案拆分为较小解决方案的某些好处。
  • 使用其他任何方法使它更精细,但又不会因重建所有内容而遭受问题吗?我听说过私有的Nuget提要,如果我的配置允许的话,是否可以解决此问题?

我的配置:

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

2 个答案:

答案 0 :(得分:1)

  

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

感谢您的回复。我已通过两个解决方案(项目SolutionA的{​​{1}})重现了此问题。然后APIClient,将SolutionB中的现有项目APIClient添加到SolutionA

然后,如果我们在SolutionB上还原nuget程序包,则解决方案B中项目SolutionB中的程序包将还原到 SolutionB 中的APIClient文件夹中>默认为文件夹,而不是\packages文件夹。

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

要解决此问题,您可以在SolutionANuGet.Config旁边添加一个SolutionA文件,其内容如下:

SolutionB

因此,<?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositoryPath" value="C:\Packages" /> </config> </configuration> 文件夹与解决方案文件无关。

此外,如果您有兴趣,可以尝试将项目\packages的{​​{1}}转换为packages.config,并使用此设置将nuget包保存在全局软件包文件夹packagereference

希望这会有所帮助。

答案 1 :(得分:0)

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

您使用哪种打包模式?


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

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