VS2017 / 2019中构建时的StackOverflowException

问题描述 投票:3回答:1

我有一个在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下工作吗?

Details:我继承了一些软件,该软件与与许多类似应用程序共享的通用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)
c# visual-studio visual-studio-2017 roslyn csc
1个回答
0
投票

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

another answer开始,解决方法似乎是将流利的电话分成多个语句:

例如:

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)
© www.soinside.com 2019 - 2024. All rights reserved.