59

3.0 フレームワークにバグがあると思わせる問題に遭遇しました。拡張メソッドを使用しようとすると、次のエラーが発生します。

Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'

この単純なコードを使用する場合:

public static class StringUtils {
    static void TestExtension(this String targetString) {

    }
}

このコンパイル エラーを解消する唯一の方法は、次のコードを追加することです。

namespace System.Runtime.CompilerServices {
    public class ExtensionAttribute : Attribute { }
}

拡張メソッドを使用してから数か月が経ちましたが、これを行う必要はなかったと確信しています。他の誰かがこの問題に遭遇しましたか?

4

16 に答える 16

73

私はまったく同じ問題を抱えています。このエラーSystem.Runtime.CompilerServices.ExtensionAttribute..ctorはやや不可解であり、さまざまな意味を持っている可能性があります。

しかし、私にとっては、 を使用しているという事実に要約されNewtonsoft.Json.Netます。ファイルへの参照を削除しNewtonsoft.Json.Net20.dll、再度追加しました。この後、私のソリューションが再びビルドされます。

最も奇妙なことは、Subversion Diff を使用して、この手順の後で何が違うのかを調べようとしたときに、何も変わっていないように見えることです。

したがって、この参照の削除と再追加が実際に何をするのかは本当にわかりませんが、質問者が言及したこの特定のエラーメッセージでビルドの問題が修正されます.

更新 1 :

コメンターが指摘したように、これに再び遭遇した場合、これを修正する適切な方法はJson.Net の ZIP をダウンロードすることです。3.5バージョンが必要であり、Json.Net を使用しているすべての場所で 3.5 を再参照して削除します。古いバージョンの .net 用にビルドされたアセンブリを参照している可能性が高いため、古い参照。

更新 2 :

Charlie Flowersは、NewtonSoft が 3.5 用であるとラベル付けしている DLL は、実際には 3.5 では動作しないと指摘しています。.net 2.0 用としてラベル付けされている DLL を使用する必要があります。

于 2010-02-01T19:41:43.677 に答える
20

私は自分でこの問題に遭遇しました。私の場合は、VS 2005/.Net 2.0 プロジェクトを VS 2008/.Net 3.5 プロジェクトに変換したためです。変換ツールは System.Core 2.0 への参照を保持していましたが、System.Core 3.5 への参照を簡単に変更する方法が見つかりませんでした。

VS 2008 でプロジェクトを最初から再作成することになり、System.Core 3.5 への適切な参照を使用して作成されました。

于 2008-12-03T19:38:33.713 に答える
17

VSでは、[プロジェクト]([ファイル]、[編集]、[表示]の横)をクリックし、[プロパティ]を選択します

次に、[アプリケーション]タブ(すでに3.5になっていることに気付くでしょう)で、ターゲットフレームワークを2.0に選択し、コンパイルします(エラーが発生します)。その後、3.5に戻し、再度コンパイルすると、エラーが消えます。

Visual Studioの小さな不具合だと思いますが、IDEをだましてください:-)

于 2008-12-20T17:34:28.087 に答える
16

VS 2008 から VS 2010 Beta 2 にアップグレードしたクラス ライブラリ プロジェクトで同じ問題が発生しました。アップグレード後までプロジェクトに拡張メソッドを追加していなかったので、同じエラーが発生し始めました。

次のコードを含むクラスをプロジェクトに追加すると、問題が解決しました。

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

このブログでヒントを見つけました: http://blog.flexforcefive.com/?p=105

于 2010-01-16T21:02:05.773 に答える
6

あなたのフレームワークは、拡張メソッドに対して十分な高さではありません。
これは、3.5 でなくても拡張メソッドを機能させるためのハックです。

于 2008-10-15T17:34:04.080 に答える
3

どのバージョンの .NET をターゲットにしていますか? ExtensionAttribute クラスは System.Core.dll (.NET 3.5) に同梱されていますが、.NET 2.0/3.0 (明らかに C# 3.0 を使用) で拡張メソッドを使用する場合は、自分で再宣言できます。実際、LINQBridgeはこれを行います。

[更新] ただし、表示されるエラーは次のとおりであるため、少し混乱しています

エラー 1 コンパイラが必要とする型 'System.Runtime.CompilerServices.ExtensionAttribute' が見つからないため、新しい拡張メソッドを定義できません。System.Core.dll への参照がありませんか? [いくつかのパスのものを切り取った]

于 2008-10-15T17:34:12.707 に答える
2

System.Core 参照が欠落していると、これらの症状が発生します。

于 2008-10-15T21:54:38.297 に答える
2

継続的な参照用:

.Net 4.0 フレームワークで過去 2 時間、まったく同じエラー メッセージと闘い、最終的に Microsoft.CSharp dll への参照が破損していることを突き止めました。イライラするほど単純な問題でした。問題のある参照を削除し、次の場所にあるそのdllへの「新しい」参照を追加しました。

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll

これにより、他の誰かがこのエラー メッセージの解決策を追跡する時間と煩わしさを軽減できることを願っています。

于 2014-09-12T19:36:51.580 に答える
1

この問題は、実際には System.Core のバージョン 2 への誤った参照が原因で発生します。これは通常、以前のバージョンの .NET から .NET 3.5 にアップグレードするときに発生します。この問題が発生している Web サイトの場合は、次の手順に従って修正できます。

1) web.config で、System.Core v3.5 への参照を追加します。

<assemblies>
   <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>

2) web.config で、構成の子として次を追加します。

<configuration>
   <!--Some other config-->
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="System.Core" publicKeyToken="B77A5C561934E089"/>
         <bindingRedirect oldVersion="2.0.0.0-2.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
   </assemblyBinding>
</configuration>
于 2009-02-23T12:51:18.960 に答える
0

VSプロジェクトを.NETFramework3.5以降にターゲットにするだけです。ほとんどの場合、プロジェクトを以前のバージョンから変換しました。

于 2011-04-05T04:48:45.443 に答える
0

csproj を編集し、それらの参照が含まれていることを確認します (単純な「参照の追加」では機能しません...):

<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
于 2016-04-05T09:25:52.040 に答える
0

私の場合、Microsoft の AntiXSSLibrary.dll の間違った NET20 バージョンが原因でした。NET35 に置き換え - エラーはなくなりました。

于 2015-11-25T21:19:48.767 に答える
0

試してみてください: プロジェクト、参照の追加、リストで System Core 3.5.0.0 を見つけて、[OK] を追加します。

于 2008-12-25T17:52:55.003 に答える
0

拡張機能は C# 3.0 で導入されましたが、これは .NET 3.5 で導入されたため、実際には .NET 3.0 で直接使用することはできません。

于 2008-10-15T17:36:15.167 に答える
0

ひょっとして、これはウェブサイトのプロジェクトですか?ターゲット フレームワークを .NET 3.5 から以前のバージョンに変更してから、.NET 3.5 に戻してみてください。

于 2008-10-15T17:48:20.307 に答える
0

既存の .Net 4.0 プロジェクトで .net 2.0 を対象とする Elmah.Sandbox のバージョンがありました。プロジェクトに拡張メソッドを追加しましたが、「Missing compiler required member」というエラー メッセージが表示されてビルドが失敗しました。

Elmah.Sandbox dll は、ElmahR の初期バージョンの一部として含まれていました。これが削除されると、すべてが再び構築されました。

于 2012-10-31T11:40:15.680 に答える