我现在处于重构一个大项目的疯狂阶段,该项目有很多遗留和不稳定的模块。我决定拆分目前拥有所有项目的解决方案(因此大约20个,并且因为将在未来几个月内肯定会出现的单元测试项目将会更多)将其链接在一起以使其更加独立和细化。
使用这种方法有一些模块,例如需要在多个解决方案中引用或添加的API客户端。
问题是Nuget软件包只能在最初首次添加的解决方案中恢复。所以最简单的例子:
解决方案A:
------ ProjectA
------ APIClient
解决方案B:
------ ProjectB
------ APIClient
由于我们不包含packages文件夹,因此会导致Nuget包出现问题:
有办法以某种方式:
我的配置:
管理多个解决方案中存在的C#项目的Nuget包
谢谢你的回复。我用两个解决方案复制了这个问题,SolutionA
和Project APIClient
。和SolutionB
,将APIClient
现有的项目SolutionA
添加到SolutionB
。
然后,如果我们在SolutionB
上恢复nuget包,那么SolutionB中项目APIClient
中的包将在SolutionB文件夹中的\packages
文件夹中恢复,而不是在SolutionA
文件夹中。
在这种情况下,项目APIClient
仍然缺少.dll
中的SolutionB
参考,你仍然必须去SolutionA
并恢复nuget包。这就是你遇到这个问题的原因。
要解决此问题,您可以在NuGet.Config
和SolutionA
旁边添加一个SolutionB
文件,其中包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="C:\Packages" />
</config>
</configuration>
所以,\packages
文件夹与解决方案文件无关。
此外,如果您有兴趣,可以尝试将packages.config
转换为项目packagereference
的APIClient
,使用此设置,nuget包将保存在全局包文件夹C:\Users\<UserName>\.nuget\packages
中。
希望这可以帮助。
为什么不在解决方案B中添加包?
你用什么包装模式?
如果使用“程序包引用”模式,则必须在解决方案B的csproj中添加程序包信息。
如果使用“程序包配置”模式,则必须在解决方案B的package.config文件中添加程序包信息。