我有一个测试项目,它在VS2015中成功构建,但在尝试在VS2017/2019中构建时由于StackOverflowException而构建失败。 在发生异常之前诊断日志中打印的最后一条语句是:
Using shared compilation with compiler from directory: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn
我已尝试在true和false之间切换UseSharedCompilation
标志,但似乎没有效果。这个问题似乎与链接的Fluent Migrator方法的数量有关(下面会有更多信息),但我没有办法更改代码来缓解这个问题。
我对编译器不太熟悉,所以不知道VS2015和新版本之间发生了什么变化,以致于这个问题突然出现。能否帮我理解,并且更好的是,给我一些傻瓜式的建议,使我的构建可以在VS2017/2019中工作?
细节:我继承了一些紧密耦合于与许多类似应用程序共享的通用dB模式的软件。 使用一种消耗包含数据和元数据的一堆XML文件的工具向db模式中插入新表和参考数据。 对于我继承的应用程序,没有测试覆盖,并且必须通过搜索和替换以及手动检查更新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)