【发布时间】:2019-10-17 16:27:17
【问题描述】:
我有一个在 VS2015 中成功构建的测试项目,但是当我尝试在 VS2017/2019 中构建它时,由于 StackOverflowException 导致构建失败。在异常发生之前,诊断日志中打印的最后一条语句是这样的:
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn
我尝试在真假之间切换UseSharedCompilation 标志,但似乎没有效果。这个问题似乎与链式 Fluent Migrator 方法的数量有关(下面会详细介绍),但我没有办法更改代码来缓解这个问题。
我不精通编译器,所以我不知道 VS2015 和更新版本之间发生了什么变化,以至于这个问题会突然出现。有人可以帮助我理解,甚至更好地给我一些构建傻瓜的建议,让我的构建在 VS2017/2019 下工作吗?
详细信息: 我继承了一些与通用 dB 架构紧密耦合的软件,该架构与一堆类似的应用程序共享。使用一种工具将新表和引用数据插入到 db 模式中,该工具使用一组包含数据和元数据的 XML 文件。对于我继承的应用程序,没有测试覆盖率,大约 40k 行 XML 内容必须通过搜索和替换和手动检查进行更新。为了解决这些和相关问题,我编写了一些代码来解析 XML 文件并使用 Fluent Migrator 内容自动生成 C# 类。一些(非规范化)表有数百列,这似乎是导致 StackOverflowException 的特定问题。编译器似乎能够处理大约 200 个 .WithColumn 调用,但除此之外,它会被炸毁。简要,除了以下。我提到这一点只是为了提供有关问题的背景并解释我到底为什么要做我正在做的事情。
.WithColumn(nameof(ColumnDescriptions.XXX)).AsString(100).NotPublishedOffline().WithColumnDescription(ColumnDescriptions.XXX)
//.WithColumn(nameof(ColumnDescriptions.YYY)).AsString(100).NotPublishedOffline().WithColumnDescription(ColumnDescriptions.YYY)
【问题讨论】:
-
我可能会将这个提交给团队:github.com/dotnet/roslyn/issues 如果可能的话,您可以尝试分享一个重现,或者您可以尝试在编译器崩溃时获取它的转储。可能和这个问题有关:github.com/dotnet/roslyn/issues/9795
-
另一个有潜在解决方法的问题:stackoverflow.com/questions/41871032/…
-
@JoshVarty 你是个摇滚明星!最后一个链接解决了我的问题。您应该将其发布为答案,以便我可以为您的坏自己提供一些道具。
标签: c# visual-studio visual-studio-2017 roslyn csc