Kar*_*sar 7 c# compiler-errors visual-studio roslyn visual-studio-2012
我试图模拟一个接口,它接受一个DateTimeOffset?
参数.突然之间,Visual Studio开始报告"内部编译器错误"并且它已"停止工作".经过大量的试验,我开始逐个删除文件,然后逐行编码.这减少到下面的代码,它重现了这个错误:
public class testClass
{
public interface ITest
{
void Test(DateTimeOffset? date);
}
public void test2()
{
var mock = new Mock<ITest>();
mock.Setup(x => x.Test(new DateTime(2012, 1, 1)));
}
}
Run Code Online (Sandbox Code Playgroud)
问题似乎是这样的:
mock.Setup(x => x.Test(new DateTime(2012, 1, 1)));
Run Code Online (Sandbox Code Playgroud)
如果我评论它,编译器工作正常.此外,问题是我正在设置一个new DateTime()
适合的DateTimeOffset
.
这是一个错误Moq
,还是VS2012
?以前有人遇到过这个错误吗?
以下代码示例也导致编译错误,包括常规Visual Studio 2012编译器和2012年9月Roslyn CTP:
using System;
using System.Linq.Expressions;
public interface ITest
{
void Test(DateTimeOffset? date);
}
public class TestClass
{
Expression<Action<ITest>> t = x => x.Test(new DateTime(2012, 1, 1));
}
Run Code Online (Sandbox Code Playgroud)
错误:
1> CSC:错误CS0583:内部编译器错误(地址00D77AFB处的0xc0000005):可能的罪魁祸首是"BIND".
此代码与Moq无关.
这显然是语义分析器中的一个错误.(文本"可能是罪魁祸首是BIND"是语义分析器中的错误的特征,在内部称为"绑定器".)这里的场景是我们在lambda中有一个可升级到可空的用户定义转换.被转换为表达式树.那段代码是一个bug场.我以为我为这个确切的场景写了一个测试用例,但也许我没有.
无论如何,问题很可能是我的不好,对此感到抱歉.尽管如此,我现在无能为力.
真正奇怪的是,据称这个bug在Roslyn和C#5编译器上都有重复.这是一个疯狂的巧合,因为Roslyn和C#5编译器对于这部分语义分析有完全不同的代码.我们从头开始重写了大部分内容.奇怪的是,我们两次以同样的方式弄错了.
无论如何,凯文会看到这个,因为你把它标记为Roslyn,如果你想在Connect网站上输入一个bug,我相信团队会很感激.
等等,你在Roslyn 得到完全相同的错误?然后发生的事情可能是IDE仍在使用C#5分析库.如果您编写将违规代码加载到Roslyn编译中并对其进行分析的代码,则可能不会收到错误.对?
这令人印象深刻,像这样使 C# 编译器崩溃是非常罕见的壮举。您可以在 connect.microsoft.com 上报告该问题,尽管 Microsoft 应该从该网站收到大量 WER 报告。无论如何,我有几个:)
您可以通过重写代码来解决该问题。要么与:
static DateTimeOffset? arg = new DateTime(2012, 1, 1);
Expression<Action<ITest>> t = x => x.Test(arg);
Run Code Online (Sandbox Code Playgroud)
或者使用清洁剂:
public class TestClass
{
Expression<Action<ITest>> t;
public TestClass() {
DateTimeOffset? arg = new DateTime(2012, 1, 1);
t = x => x.Test(arg);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
688 次 |
最近记录: |