1

次のようなコードを使用して、フレームワーク 3.5 をターゲットとする Visual Studio 2010 のプロジェクトがあります。

    public class Test    {
        private object _field;
        private Action defaultAction = null;

        public Test(Action a)
        {
            defaultAction = a;
        }

        public Test()
            : this(() => { _field = new object(); })
        {
        }
    }
  • VS からプロジェクトをコンパイルすると、11 行目でコンパイル エラーが報告されます。
  • 「C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe Test.sln」を使用してコマンド ラインからプロジェクトをコンパイルすると、正常にコンパイルされます。

実際、このコードは VS2008 でコンパイルされますが、フレームワーク 3.5 をターゲットとする VS2010 ではコンパイルされません。

何が起こっているかについて何か考えはありますか?

アップデート

V2010 のコードを修正するために、次のように変更しました (これは元のコードと同等です)。

public class Test    {
    private object _field;
    private Action defaultAction = null;

    public Test(Action a)
    {
        defaultAction = a;
    }

    public Test()
    {
        defaultAction = () => {_field = new object();}
    }
}

しかし、心配なのは、Visual Studio がフレームワーク 4.0 でコードをコンパイルしているため、顧客の環境 (フレームワーク 3.5) にアプリケーションを展開するときに、他のエラーが発生する可能性があることです。

4

1 に答える 1

0

現時点では VS2008 または .NET 3.5 にアクセスできないため、コンパイルが必要な理由を調査できません。What's New in the .NET Framework 4からリンクされている説明があるかもしれません

ただし、私が提供できるのは、VS2010 でコンパイルするための修正です。_field を static として宣言すると、そのインスタンスが Test クラスのコンストラクターで使用できるようになります。投稿されたコードの 2 行目をこれに置き換えると、コードがコンパイルされます。

private static object _field;
于 2012-11-21T08:43:39.617 に答える