首页 > 解决方案 > Visual Studio 无法按预期处理嵌套子模块

问题描述

我有 3 个解决方案

解决方案

解决方案 A

解决方案 B

解决方案 C

文件结构

解决方案/项目通过 Git 子模块导入,其结构如下:

- \
--- \Solution C
------ \Project C1
------ \submodules
--------- \Solution A
------------ Project A1
--------- \Solution B
------------ \Project B1
------------ \Project B2
------------ \submodules
--------------- \Solution A
------------------ \Project A1

问题

虽然我使用 Visual Studio 打开Solution C和编译里面的项目,但结果是多种多样的:(注意:我没有包含\Solution C\submodules\Solution B\submodules\Solution A\Project A1在解决方案中,因为 VS 不允许 2 个同名项目)

VS总是说Project B2找不到Project A1(哪个路径是\Solution C\submodules\Solution B\submodules\Solution A\Project A1),除非我右键单击Project A1并选择清理,然后重建Project B2(必须清理),以下是消息:

Error NU1105 Unable to find project information for '\Solution C\submodules\Solution B\submodules\Solution A\Project A.csproj'. Inside Visual Studio, this may be because the project is unloaded or not part of current solution. Otherwise the project file may be invalid or missing targets required for restore.

但是我尝试只克隆Solution B到一个新位置(使用 submodules Solution A),它可以按预期编译和运行。

猜测

更新

向导


任何帮助将不胜感激

标签: gitvisual-studio.net-coregit-submodules

解决方案


经过数小时的研究,确认了一个 .NET 机械问题,同一个项目被保存在不同的位置,并被多个其他项目引用。哪个 .NET 无法识别它们是同一个项目,即使它们都是从 git 服务器克隆并共享相同的名称。

正如所jessehouwing建议的(感谢您的所有帮助 jessehouwing !!)我们可以将所有项目(子模块)包装到一个巨大的开发解决方案中(我猜这种方法与名称解决方案完全匹配)

然而,我们正在尝试做的是拥有以下架构:

  • 核心库
  • ACompany.Cores.Library
  • ACompany.Cores.Web
  • BCompany.Cores.Library1
  • BCompany.Cores.Library2
  • BCompany.Cores.Console
  • BCompany.Cores.Web

所以最后我决定使用内部 NuGet 提要,而 VS2017 已经可以在构建时自动生成 nupkg 文件,该文件已经过测试并且可以按预期完美运行。

@jessehouwing 你可以回答这个问题,我会把你的作为答案,再次感谢!


推荐阅读