繁体   English   中英

在 VS2017/2019 中构建 StackOverflowException

[英]StackOverflowException on build in VS2017/2019

我有一个在 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)

我相信在将许多流畅的调用链接在一起时,这是一个已知的 Roslyn 错误: https://github.com/dotnet/roslyn/issues/9795

另一个答案来看,解决方法似乎是将您的流利调用拆分为多个语句:

例如:

var result = x.WithColumn(nameof(ColumnDescriptions.XXX)).AsString(100).NotPublishedOffline().WithColumnDescription(ColumnDescriptions.XXX)

可以分解成

var temp = .WithColumn(nameof(ColumnDescriptions.XXX)).AsString(100)
var result = temp.NotPublishedOffline().WithColumnDescription(ColumnDescriptions.XXX)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM