C# VisualStudio:生成顺序随机?
我有一个包含239个项目的解决方案。我目前正在处理以下问题: 在完成完全清理(删除输出目录)后,对解决方案执行“全部重建”时: 我理解如下:C# VisualStudio:生成顺序随机?,c#,.net,visual-studio-2013,C#,.net,Visual Studio 2013,我有一个包含239个项目的解决方案。我目前正在处理以下问题: 在完成完全清理(删除输出目录)后,对解决方案执行“全部重建”时: 我理解如下: Visual studio正在对编译进行多线程处理(在我的例子中,一次4个程序集) 我没有明确指定“项目依赖关系”(右键单击解决方案->项目依赖关系) 我不明白的是 在这个示例中,AAA是BBB的一个引用项目,对我来说,它是一个隐式依赖项,在不确定AAA是否已正确构建的情况下,如何能够正确构建BBB 我们应该如何管理一个可以创建239个项目的解决方案
- Visual studio正在对编译进行多线程处理(在我的例子中,一次4个程序集)
- 我没有明确指定“项目依赖关系”(右键单击解决方案->项目依赖关系)
- 在这个示例中,AAA是BBB的一个引用项目,对我来说,它是一个隐式依赖项,在不确定AAA是否已正确构建的情况下,如何能够正确构建BBB
- 我们应该如何管理一个可以创建239个项目的解决方案?要确保我们不引用错误的项目已经够难的了,所以如果我们总是要确保构建顺序,那就变得复杂了
- 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>
{6241076B-05B3-4D5D-AFA9-46D41E1EC3A}
AAA
假的
编辑2
我不知道这是否直接相关,但在检查项目相关性时,我发现BBB
取决于CCC
(但是,AAA
没有显示任何内容。我想知道是否指定了依赖项,它基本上忽略了来自引用的所有信息?如果我尝试删除CCC
依赖项,我会收到一条消息:
此依赖项是由项目系统添加的,无法删除
编辑3
我有一个有趣的发现:事实上,我在edit2中遇到的错误是因为在创建两个项目之间的引用时添加了此依赖项
由于未知原因,这里似乎没有为一个引用创建此依赖关系。如果我删除项目引用,然后将该引用再次添加到同一项目,则我现在具有此依赖关系(无法删除)。
我找不到这个“依赖项”存储在哪里。
关于如何“修复”这个解决方案,你有什么想法吗?从你的帖子中你说过
“我没有明确的“项目依赖关系”指定(右键单击解决方案->项目依赖关系)”
这意味着您的所有引用都指向已编译的DLL,而不是项目
由于VS加载那么多项目引用的速度太慢,我已经多次看到大型解决方案团队(您有239个项目)采用这种方法
我所看到的解决方法有:
- 主解决方案的每个子区域都有多个解决方案,如实体、DAL、逻辑、服务等
- 将DLL(不推荐,但我已经看到)检入源代码以用于更快的构建。一旦更改代码区域,您就负责替换DLL
- 配置项目依赖项设置,以便按正确顺序完成生成
- 处理项目引用的性能(缓慢,但确保构建顺序
一个包含239个项目的单一解决方案似乎违背了将您的开发划分为更小模块的原则,但这并不总是您的决定…我在一个更小但高度相互依赖的解决方案中看到了这个问题。我们通过减少并行项目构建的最大数量来解决这个问题,直到它被预测tably成功。工具-->选项-->项目和解决方案-->构建并运行。经过一些调查,我发现了问题: 事实上,Visual Studio应该在将项目引用到项目中时自动添加项目之间的依赖关系。我可以通过添加项目引用很容易地看到这一点。此外,似乎无法删除这些“依赖关系”(请参见我的编辑2) 所以我问的问题是,我如何能够引用一些项目,而不依赖于一些项目 我检查了我的引用(至少在某些情况下我看到它不起作用),它们是项目引用而不是dll 我的一些同事使用完全相同的代码(获取最新版本的代码而不做任何更改)没有出现此问题,并且在VisualStudio中显示了依赖关系 因此,我最后删除了解决方案文件附近的
*.sdf
文件(在关闭visual studio之后)。我重新打开了它,所有依赖项都已由visual studio重新计算。现在,我重建了,一切都直接成功了。
我不知道为什么会发生这种情况,我花了一些时间杀了visual studio,也许当时有些东西被破坏了。我知道这不是一个解决方案,但如果使用依赖注入技术,如MEF或Unity,可以将编译依赖项转换为运行时依赖项 在这种情况下,您的项目具有有限的依赖项(接口、容器)
但是我不得不说,这些技术有一些副作用——比如“伪随机”初始化等等……BBB引用AAA项目还是AAA输出程序集?也许AAA有错误?AAA单独构建是否正确?它们是项目引用吗?或者你只是引用dll吗?如果是dll引用:编译器无法解析lve这些;对于项目参考:它应该能够始终参考项目(如果不是,这是
<ProjectReference Include="..\..\..\..\SomeOtherFolder\AAA\AAA.csproj">
<Project>{6241076B-05B3-4D5D-AFA9-46D41E1CEC3A}</Project>
<Name>AAA</Name>
<Private>False</Private>
</ProjectReference>