我有以下项目结构:
MainSolution\
|
+---> SharedProject\
| |
| +---> SharedProject.csproj
| +---> packages.config
+---> SubSolution\
| |
| +---> packages\
| +---> SubSolution.csproj
| +---> SubSolution.sln
| +---> packages.config
+---> packages\
+---> MainSolution.sln
MainSolution.sln
是主要解决方案,引用了众多项目,包括SharedProject.csproj
SubSolution.sln
仅引用SubSolution.csproj
和SharedProject.csproj
。
SharedProject.csproj
的包引用指向..\packages\
(即MainSolution\packages\
)
SubSolution.csproj
的包引用指向packages\
(即MainSolution\SubSolution\packages\
)。
NuGet作为扩展安装在Visual Studio中。
问题
我在Visual Studio中打开MainSolution.sln
并构建,NuGet恢复SharedProject.csproj
所需的所有包,这些包被正确放置在MainSolution\packages\
中。这是预期的。
我在Visual Studio中打开SubSolution.sln
。我检查了SharedProject.csproj
的包引用,它们都指向了预期的位置(MainSolution\packages\
)。
我现在构建SubSolution.sln
,NuGet会恢复SharedProject.csproj
和SubSolution.csproj
所需的所有包。 但是,它不会检测到SharedProject.csproj
所需的软件包已经存在于磁盘上 - 它会再次(下载)这些软件包再次并将它们放入当前解决方案的packages
目录,即MainSolution\SubSolution\packages\
。所以现在这些包不必要地重复了。
问题
构建SubSolution.sln
时,为什么NuGet(和/或Visual Studio)选择将SharedProject.csproj
引用的包复制到当前解决方案的packages
目录中 - 而不是仅使用引用已存在于MainSolution\packages\
目录中的软件包?