我有一个包含 239 个项目的解决方案。我目前有以下问题:
当我在完成完全清理(删除输出目录)后对解决方案执行“全部重建”时:
17>------ Rebuild All started: Project: AAA, Configuration: Debug x86 ------
18>------ Rebuild All started: Project: BBB, Configuration: Debug x86 ------
18>CSC : error CS0006: Metadata file 'E:\Dev\Trunk\Debug\x86\AAA.dll' could not be found
17> XmsCommon -> E:\Dev\Trunk\Debug\x86\AAA.dll
我了解以下内容:
- Visual Studio 正在多线程编译(在我的例子中,一次 4 个程序集)
- 我没有明确指定“项目依赖关系”(右键单击解决方案 -> 项目依赖关系)
我不明白的地方
- 在这个例子中 AAA 是 BBB 的引用项目,对我来说,它是一个隐式依赖项,在不确定 AAA 是否已正确构建的情况下如何正确构建 BBB?
- 对于包含 239 个项目的解决方案,我们应该如何管理它?很难确保我们不会引用错误的项目,所以如果我们总是必须确保构建顺序,就会变得很复杂。
一个注意事项:我不知道这是否是由于最近的变化(项目/ Visual Studio /...),因为我花了 2 年的时间研究这个解决方案,这是第一次我一次又一次地遇到这个问题。
所以问题:
- 有没有一种方法可以解决这个问题而不必指明每个项目对解决方案的依赖性?
- 如果没有,我们应该怎么做?
编辑 评论后,这里是一些附加信息:
- 除了找不到引用外,AAA 或 BBB 没有编译错误
- 我们引用的是项目而不是 dll(在我遇到错误的一个特定情况下进行了检查。
在 BBB.csproj
中,我有以下引用:
<ProjectReference Include="..\..\..\..\SomeOtherFolder\AAA\AAA.csproj">
<Project>{6241076B-05B3-4D5D-AFA9-46D41E1CEC3A}</Project>
<Name>AAA</Name>
<Private>False</Private>
</ProjectReference>
编辑 2
我不知道这是否直接相关,但是在检查项目依赖项时,我发现 BBB
依赖于 CCC
(但 AAA 没有任何指示
。我想知道是否有依赖指定,它基本上忽略了来自引用的所有信息?如果我尝试删除 CCC
依赖,我收到一条消息:
该依赖是项目系统添加的,无法移除
编辑 3
我有一个有趣的发现:事实上,我在 EDIT 2 中遇到的错误是因为在创建两个项目之间的引用时添加了此依赖项。
由于未知原因,似乎没有为此处的一个引用创建此依赖项。如果我删除项目引用,然后再次将引用添加到同一个项目,我现在有了这个依赖项(我无法删除)。 我找不到这个“依赖项”的存储位置。 关于如何“修复”此解决方案的任何想法?
最佳答案
从你的帖子你是这么说的
"I've no explicit "Project Dependency" specify(Right click on solution -> Project Dependencies)"
这意味着您所有的引用都是针对已编译的 DLL,而不是项目。
由于 VS 加载那么多项目引用的速度很慢,我已经多次看到具有大型解决方案(您有 239 个项目)的团队使用这种方法。
我见过的解决方法是:
- 针对主要解决方案的每个子区域的多个解决方案,例如实体、DAL、逻辑、服务等。
- 将 DLL(不推荐,但我见过) checkin 源代码以用于更快的构建。更改代码区域后,您有责任替换 DLL。
- 配置项目依赖项设置,以便构建按正确顺序完成。
- 处理项目引用的性能(缓慢,但确保构建顺序
包含 239 个项目的单一解决方案似乎违背了将您的开发划分为更小模块的原则,但这并不总是您的决定...
关于c# - Visual Studio : Build order random?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29899426/