問題

私はそのパラメータの1つとしてDateTimeOffset?をとるインターフェイスを模擬しようとしていました。突然、Visual Studioは「内部コンパイラエラー」を報告し始め、「動作を停止しました」と報告しました。多くの試行の後、ファイルを1つずつ削除してから、行ごとにコード化しました。これは、このエラーを再現する以下のコードに減らされました。

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

私がそれをコメントすると、コンパイラは正常に動作します。また、問題は、DateTimeOffsetに収まるnew DateTime()を設定していることです。

これはMoq、またはVS2012のバグですか?誰もこれまでにこのエラーがありましたか?

更新

次のコードサンプルでは、通常のVisual Studio 2012コンパイラとRoslyn CTP 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:エラーCS0583:内部コンパイラエラー(アドレス0xc000005) おそらく犯人は `BIND' です。

このコードはMoqとは関係ありません。

  ベストアンサー

これは印象的で、このようなC#コンパイラをクラッシュさせることは非常にまれな偉業です。あなたはconnect.microsoft.comでそれを報告することができますが、MicrosoftはWERレポートの束を受け取っているはずです。とにかく私からいくつか:)

コードを書き直すことで問題を回避できます。どちらかと:

 static DateTimeOffset? arg = new DateTime(2012, 1, 1);
Expression<Action<ITest>> t = x => x.Test(arg);
 

またはクリーナーで:

 public class TestClass
{ 
    Expression<Action<ITest>> t;

    public TestClass() {
        DateTimeOffset? arg = new DateTime(2012, 1, 1);
        t = x => x.Test(arg);
    }
}
 

  同じタグがついた質問を見る

c#visual-studiovisual-studio-2012compiler-errorsroslyn