我刚刚升级到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 } }
有谁知道崩溃发生的原因?
以下更简单的示例还重现了该问题,该问题与表达式树中的重写类型转换节点有关:
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