Visual Studio无法按预期处理嵌套子模块

时间:2019-04-12 10:05:15

标签: git visual-studio .net-core git-submodules

我有3种解决方案,

解决方案

解决方案A

  • Project A1是System.Data.SqlClient类(.NET Standard 2.0)的扩展项目。

解决方案B

  • Project B1是用于管理某些实例(.NET Standard 1.0)的库
  • Project B2是一个库,用于通过Project A1(.NET Standard 2.0)通过扩展的System.Data.SqlClient管理实例。

解决方案C

  • Project C1是一个依赖于A1B1(.NET Standard 2.0)的库
  • Project C2是一个NUnit测试,取决于以上所有项目(.NET Core 2.2)

文件结构

解决方案/项目通过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并在其中编译项目,结果却是多种多样的:( note :自解决方案以来,我没有将\Solution C\submodules\Solution B\submodules\Solution A\Project A1包括在内VS不允许2个名称相同的项目)

  • 项目A1:好的
  • 项目B1:好的
  • 项目B2:不行
  • 项目C1:好的
  • 项目C2:不好

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

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),并且可以按预期进行编译和运行。

猜测

  • 正如@jessehouwing所建议的,这可能不是Git问题,而是Visual Studio,我想这是由于VS正在使用Solution A的2个版本编译项目,而我已经花了几个小时来确保{{ 1}}和Project A1从相同的分支和版本加载了Solution B

更新

向导

  • Solution C中的Solution A:FD9834ED-3C94-4445-AE15-DFF0F5C42656
  • Project A中的{li} Solution AProject A的子模块文件夹:FD9834ED-3C94-4445-AE15-DFF0F5C42656
  • <{1}中的
  • Solution A E0FEC3C6-42AB-47D9-912A-40B3C5D2BA66
  • <{1}中的
  • Solution B 2A7E2981-87F6-40A5-86F4-D523EC1F68DB

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

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

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

不过,我们要尝试的是采用以下架构:

  • Cores.Library
  • ACompany.Cores.Library
  • ACompany.Cores.Web
  • BCompany.Cores.Library1
  • BCompany.Cores.Library2
  • BCompany.Cores.Console
  • BCompany.Cores.Web

所以最终我决定去一个内部NuGet提要,而VS2017已经可以在构建中自动生成nupkg文件,该文件已经过测试,可以按预期正常运行。

@jessehouwing您可能会回答这个问题,我会把您的问题设置为答案,再次感谢!