当前位置:  开发笔记 > 编程语言 > 正文

为什么Roslyn在尝试重写这个lambda时会崩溃?(Visual Studio 2015更新1)

如何解决《为什么Roslyn在尝试重写这个lambda时会崩溃?(VisualStudio2015更新1)》经验,为你挑选了1个好方法。

我刚刚升级到VS2015.1并且在尝试编译我的一个项目时遇到了编译器崩溃.如果您将以下repo代码放在控制台应用程序中(并添加对moq.dll的引用),则第12行中的代码会使我的编译器崩溃.这似乎发生在Roslyn lamdba重写调用期间.

using System.Collections.Generic;
using System.Linq;
using Moq;

namespace RoslynError
{
  class Program
  {
    static void Main(string[] args)
    {
      var mockRepo = new MockRepository(MockBehavior.Strict);
      var obj = mockRepo.OneOf(x => x.Value == (OptionEnum?)null);
    }
  }

  class DTO 
  {
    public DTO(OptionEnum? enumVal)
    {
      Value = enumVal;
    }    

    public OptionEnum? Value;
  }

  enum OptionEnum
  {
    NotSpecified    
  }
}

有谁知道崩溃发生的原因?



1> Sune Foldage..:

以下更简单的示例还重现了该问题,该问题与表达式树中的重写类型转换节点有关:

using System;
using System.Linq.Expressions;

namespace Bug461
{
  class Program
  {
    enum Test { }

    static void Main()
    {
      Expression> x = t => t == (Test?)null;
    }
  }
}

编辑:我稍微编辑了代码以避免警告.

编辑2:该错误是由https://github.com/dotnet/roslyn/commit/5c602fc6引起的,其中降级的枚举操作数(即空文字)没有关联的类型.

编辑3:我提出了一个建议修复的拉取请求:https://github.com/dotnet/roslyn/pull/7227

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有