git - Visual Studio 无法按预期处理嵌套子模块
问题描述
我有 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
是一个依赖于A1
和B1
(.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
和编译里面的项目,但结果是多种多样的:(注意:我没有包含\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
并选择清理,然后重建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
),它可以按预期编译和运行。
猜测
- 正如@jessehouwing 所建议的,这可能不是 Git 问题,而是 Visual Studio,我猜这是因为 VS 正在用 2 个版本编译项目,
Project A1
而我已经花了几个小时来确保Solution B
并从相同的分支和版本Solution C
加载。Solution A
更新
向导
Project A
:Solution A
FD9834ED-3C94-4445-AE15-DFF0F5C42656Project A
Solution A
with的Solution B
子模块文件夹:FD9834ED-3C94-4445-AE15-DFF0F5C42656Project A
:Solution A
E0FEC3C6-42AB -47D9-912A-40B3C5D2BA66Project A
:Solution C
2A7E2981-87F6-40A5-86F4 -D523EC1F68DB
任何帮助将不胜感激
解决方案
经过数小时的研究,确认了一个 .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 你可以回答这个问题,我会把你的作为答案,再次感谢!
推荐阅读
- php - Invalid Encoding json(显示西里尔字母时出现问题)
- c++ - C++ - 否则返回 Elseif
- eclipse - 为什么不调用“org.eclipse.jdt.ui.javaCompletionProposalSorters”扩展点?
- validation - 如何在 vuetify 中添加密码匹配验证?
- oracle - 我想在报告输出中显示参数的日期
- sql - 如何在 SQL Server 中将重复的日期值显示为空?
- java - 接受包含特定方法的对象而不是接受特定类型
- java - 如何在除c驱动器之外的任何可用驱动器中使用java创建文件夹
- javascript - 数据表函数不适用于 Reactjs
- node.js - 如何从 twitter 请求令牌 API 生成 oauth_token