CSC.exe抛出"由于StackOverflowException而导致进程终止"编译时

时间:2016-03-14 15:16:44

标签: c# msbuild

我正在使用Entity Framework 4.0

创建一个属性超过1k的新类时,我在创建迁移包后遇到问题。在尝试编译项目时,我得到Build Failed。 " csc.exe已退出,代码为255"

当仔细查看详细信息时,我在构建日志中看到了这个消息:

使用" Csc"来自程序集的任务" C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin \ Microsoft.Build.Tasks.CodeAnalysis.dll"。 1>任务" Csc" 1 GT; 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 GT;
1 GT;由于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);

    }

1 个答案:

答案 0 :(得分:2)

一个班级超过1000个属性对我来说太过分了,真的!

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

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

相关问题