为什么 Roslyn 在尝试重写此 lambda 时会崩溃? (Visual Studio 2015 更新 1)
Why does Roslyn crash when trying to rewrite this lambda? (Visual Studio 2015 update 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<DTO>(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<Func<Test?, bool>> x = t => t == (Test?)null;
}
}
}
编辑:我稍微编辑了代码以避免出现警告。
编辑 2:错误是由 https://github.com/dotnet/roslyn/commit/5c602fc6 引起的,其中降级的枚举操作数(即空文字)没有关联类型。
编辑 3:我提出了一个带有建议修复的拉取请求:https://github.com/dotnet/roslyn/pull/7227
我刚刚升级到 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<DTO>(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<Func<Test?, bool>> x = t => t == (Test?)null;
}
}
}
编辑:我稍微编辑了代码以避免出现警告。
编辑 2:错误是由 https://github.com/dotnet/roslyn/commit/5c602fc6 引起的,其中降级的枚举操作数(即空文字)没有关联类型。
编辑 3:我提出了一个带有建议修复的拉取请求:https://github.com/dotnet/roslyn/pull/7227