c# - 采用 DateTimeOffset 的表达式导致 Visual Studio 内部编译器错误

标签 c# visual-studio visual-studio-2012 compiler-errors roslyn

我试图模拟一个将 DateTimeOffset? 作为其参数之一的接口(interface)。突然之间,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)));
    }
}

问题似乎是行:

mock.Setup(x => x.Test(new DateTime(2012, 1, 1)));

如果我评论它,编译器工作正常。此外,问题是我正在设置适合 DateTimeOffsetnew DateTime()

这是 MoqVS2012 中的错误吗?以前有人遇到过这个错误吗?

更新

以下代码示例也会导致编译错误,无论是使用常规 Visual Studio 2012 编译器还是使用 Roslyn CTP September 2012:

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));
}

错误:

1>CSC : error CS0583: Internal Compiler Error (0xc0000005 at address 00D77AFB): likely culprit is 'BIND'.

此代码与 Moq 无关。

最佳答案

这显然是语义分析器中的错误。 (文本“likely culprit is BIND”是语义分析器中错误的特征,在内部称为“binder”。)这里的场景是我们在 lambda 中有一个提升到可空的用户定义转换,它是转换为表达式树。该代码是一个错误农场。我以为我为这个确切的场景写了一个测试用例,但也许我没有。

无论如何,问题很可能是我的错,对此深表歉意。不过,我现在对此无能为力。

但真正奇怪的是,据称该错误在 Roslyn 和 C# 5 编译器上都会重现。这是一个疯狂的巧合,因为 Roslyn 和 C# 5 编译器对于语义分析的这一部分有完全不同的代码。我们从头开始重写了大部分内容。奇怪的是我们会以同样的方式犯错两次。

无论如何,Kevin 会看到它,因为您将它标记为 Roslyn,如果您想在 Connect 网站上输入错误,我相信团队会很感激。

更新:

等等,您在 Roslyn 中遇到了完全相同的错误?那么发生的事情很可能是 IDE 仍在使用 C# 5 分析库。如果您编写代码将有问题的代码加载到 Roslyn 编译中并对其进行分析,您可能不会收到错误。对吧?

关于c# - 采用 DateTimeOffset 的表达式导致 Visual Studio 内部编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902520/

相关文章:

php - IIS express 会在 Visual Studio 中运行 php 吗?

c# - 如何禁用整个解决方案的特定警告?

c# - Visual Studio 2012 给出了荒谬的错误

c# - 部署应用程序时,asp.net mvc 应用程序抛出 Controller 异常

c# - 使用 system.management 关闭时访问被拒绝

c# - worker 角色中的 Entity Framework DbContext 生命周期

css - 如何限制 Visual Studio 2012.2 在 LESS 编辑器中生成 .css 文件?

c# - ownerType 不是 DependencyObject 的 DependencyProperty 有什么用?

visual-studio - Visual Studio 2010 : Easiest way to duplicate a class?

visual-studio - 从控制台使用 VS2012 diff 工具