繁体   English   中英

编译时,CSC.exe抛出“进程由于StackOverflowException而终止”

[英]CSC.exe throws “Process is terminated due to StackOverflowException” when compiling

我正在使用Entity Framework 4.0

创建一个刚好具有超过1k个属性的新类后,在创建迁移包后出现了问题。 尝试编译项目时,我得到“构建失败”。 “ csc.exe已退出,代码为255”

当进一步研究细节时,我会在构建日志中看到以下消息:

使用程序集“ C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.Build.Tasks.CodeAnalysis.dll”中的“ Csc”任务。 1>任务“ Csc” 1> C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ csc.exe / noconfig / nowarn:1701,1702,2008 / nostdlib + / platform:anycpu32bitpreferred / errorreport:prompt / warn:4 / define:DEBUG; TRACE / errorendlocation / preferreduilang:en-US / highentropyva + / reference:“ C:... 1>
1>进程由于StackOverflowException而终止。 1> C:\\ Program Files(x86)\\ MSBuild \\ 14.0 \\ bin \\ Microsoft.CSharp.Core.targets(67,5):错误MSB6006:“ csc.exe”退出,代码为255。

显然,迁移脚本中的Up()方法创建了一个很大的CreateTable方法。 我认为这就是问题所在。 我不太确定。

使用EF时,实际上不可能有这么多字段的类吗?

更新:模型类在单独的项目中,并且可以正常编译。 问题在于迁移方法。

它也是自动生成的,看起来像这样:

public partial class CustomClass : DbMigration
{
    public override void Up()
    {
        CreateTable(
            "dbo.GeneratedClasses",
            c => new
                {
                    RowId = c.Int(nullable: false, identity: true),
                    RecordTime = c.DateTime(nullable: false),
                    Prop1 = c.Decimal(nullable: false, precision: 18, scale: 2),
                    Prop2 = c.Decimal(nullable: false, precision: 18, scale: 2),
                    Prop3 = c.Decimal(nullable: false, precision: 18, scale: 2),

...

                    PropN= c.Decimal(nullable: false, precision: 18, scale: 2),
                })
            .PrimaryKey(t => t.RowId);

    }

在我看来,一类中的1000多个属性实在太多了!

撇开这一点,问题很可能不是那样。 StackOverflowException指示无限递归。 可能存在一个引用自身的EF字段/属性,从而创建了一个无限循环。

我建议禁用一些字段,然后尝试对其进行编译,并继续这样做,直到找到有问题的行。

暂无
暂无

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

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