我现在正处于一个大型项目的重构疯狂阶段,该项目具有很多旧版和不稳定的模块。我决定拆分解决方案,该解决方案目前已链接了所有项目(因此大约有20个项目,由于单元测试项目肯定会在下个月推出,因此会有更多项目),以使其更加独立和颗粒状。
通过这种方法,有一些模块,例如需要在多个解决方案中引用或添加的API客户端。
问题在于,Nuget软件包仅在首次添加时才被还原。所以最简单的例子:
解决方案A:
------ ProjectA
------ APIClient
解决方案B:
------ ProjectB
------ APIClient
由于我们不包括packages文件夹,因此会导致Nuget软件包出现问题:
克隆存储库。
打开解决方案B,对其进行构建并还原Nugets作为解决方案。
解决方案B中ClientAPI软件包的错误。
转到解决方案A进行构建,然后还原Nugets作为解决方案
回到解决方案B。
在解决方案B中为ClientAPI还原了螺母,并且错误消失了。
有什么办法吗?
我的配置:
答案 0 :(得分:1)
为多个解决方案中存在的C#项目管理Nuget软件包
感谢您的回复。我已通过两个解决方案(项目SolutionA
的{{1}})重现了此问题。然后APIClient
,将SolutionB
中的现有项目APIClient
添加到SolutionA
。
然后,如果我们在SolutionB
上还原nuget程序包,则解决方案B中项目SolutionB
中的程序包将还原到 SolutionB 中的APIClient
文件夹中>默认为文件夹,而不是\packages
文件夹。
在这种情况下,项目SolutionA
仍然缺少APIClient
中的.dll
引用,您仍然必须转到SolutionB
并还原nuget软件包。这就是您遇到该问题的原因。
要解决此问题,您可以在SolutionA
和NuGet.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文件中添加软件包信息。