VS2017/2019 中生成的 StackOverflowException
StackOverflowException on build in VS2017/2019
我有一个在 VS2015 中成功构建的测试项目,但是当我尝试在 VS2017/2019 中构建它时由于 WhosebugException 而导致构建失败。在异常发生之前打印在诊断日志中的最后语句是这样的:
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\Roslyn
我试图在 true 和 false 之间切换 UseSharedCompilation
标志,但它似乎没有效果。这个问题似乎与链接的 Fluent Migrator 方法的数量有关(下面有更多内容),但我没有办法更改代码来缓解这个问题。
我对编译器不是很了解,所以我不知道VS2015和更新版本之间有什么变化,所以这个问题会突然出现。有人可以帮助我理解,甚至更好地给我一些傻瓜式的建议,让我的构建在 VS2017/2019 下工作吗?
详细信息: 我继承了一些软件,这些软件与一组类似应用程序共享的通用 dB 模式紧密耦合。使用一种工具将新表和参考数据插入到数据库模式中,该工具使用一堆包含数据和元数据的 XML 文件。对于我继承的应用程序,没有测试覆盖率和大约 40k 行的 XML 内容必须通过搜索和替换以及手动检查进行更新。为了解决这些问题和相关问题,我编写了一些代码来解析 XML 文件并使用 Fluent Migrator 内容自动生成 C# 类。一些(非规范化)表有数百列,这似乎是导致 WhosebugException 的特定问题。编译器似乎能够处理大约 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)
我有一个在 VS2015 中成功构建的测试项目,但是当我尝试在 VS2017/2019 中构建它时由于 WhosebugException 而导致构建失败。在异常发生之前打印在诊断日志中的最后语句是这样的:
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio19\Enterprise\MSBuild\Current\Bin\Roslyn
我试图在 true 和 false 之间切换 UseSharedCompilation
标志,但它似乎没有效果。这个问题似乎与链接的 Fluent Migrator 方法的数量有关(下面有更多内容),但我没有办法更改代码来缓解这个问题。
我对编译器不是很了解,所以我不知道VS2015和更新版本之间有什么变化,所以这个问题会突然出现。有人可以帮助我理解,甚至更好地给我一些傻瓜式的建议,让我的构建在 VS2017/2019 下工作吗?
详细信息: 我继承了一些软件,这些软件与一组类似应用程序共享的通用 dB 模式紧密耦合。使用一种工具将新表和参考数据插入到数据库模式中,该工具使用一堆包含数据和元数据的 XML 文件。对于我继承的应用程序,没有测试覆盖率和大约 40k 行的 XML 内容必须通过搜索和替换以及手动检查进行更新。为了解决这些问题和相关问题,我编写了一些代码来解析 XML 文件并使用 Fluent Migrator 内容自动生成 C# 类。一些(非规范化)表有数百列,这似乎是导致 WhosebugException 的特定问题。编译器似乎能够处理大约 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)