「コンパイラーが必要なメンバーがありません」というエラーがコードにほとんど変更を加えずに複数回スローされる


94

今日、実行しているC#MVCサイトにいくつかの変更をデプロイした後、いくつかの変更を加えるために戻って、このエラーに遭遇しました。

コンパイラーが必要なメンバーがありませんSystem.Runtime.CompilerServices.ExtensionAttribute..ctor

エラーは、説明だけではなく、少しあいまいです(参照するファイル、行、または列はなく、プロジェクトのみです)。また、エラーを合計20回スローします。デプロイしたとき(当時は完全に機能していました)と今の間にコードに加えた変更は3つだけです。変更を元に戻しましたが、それでも同じエラーがスローされ、意味がありません。

SOやGoogleでこのエラーに関する多くの情報を見つけられませんでしたが、この解決策といくつかのMonoプロジェクトエラーへの参照(私はMonoを使用していません)を除きます。上記のガイが提供するソリューションでは、コンパイラが参照を解決できるようにするクラス定義を追加する必要があります。この時点までそれをする必要がなかったので、特にこれをしたくはありません。コードを濁らせてしまいます。

誰かがこれを以前に遭遇したことがあれば、ちょうど興味があります。前もって感謝します!


1
C#3.0コンパイラを使用しているが、.NET Framework 2.0に対してコンパイルしているようです。アセンブリ参照を確認してください。
dtb 2011年

回答:


27

このエラーは通常、プロジェクトが.NET 2.0に対してコンパイルされているか、System.Core.dllの正しいバージョンを参照していないことを意味します。

ほぼ重複する質問については、C#で拡張メソッドを使用するときのエラーを参照してください


実際には、私が使用していないアセンブリ(Azure)からの不適切な参照があることがわかりました。Azureアセンブリが.Net 2.0に対してコンパイルされたとは思いませんが、それを削除すると問題が解決しました。私のアセンブリや.Netバージョン(4.0)に関連するものにかなり前から触れていなかったため、これがランダムに発生した理由がわかりません。ああ、私を正しい方向に向けてくれてありがとう。
jamesmillerio

Unity3Dはデフォルトで(執筆時)コンパイラを.NET 2に設定します。この問題を修正するには、プレーヤーの設定で、新しい.NETバージョンに変更してください。
シャドウ

230

私の場合、それはプロジェクトが参照していないためでしたMicrosoft.CSharp。そのアセンブリへの参照を追加すると、正常にコンパイルされました。


3
問題を解決しました。
Anton Lyhin 2016年

16
私の問題は、動的なExpandoオブジェクトを使用した単体テストでした。Microsoft.CSharpを参照することがトリックでした。ありがとう!
realPT

1
私は動的タイプNewtonSoftなどを持っていました。.NetStandardクラスライブラリ: `` `string weatherjson = await GetAsync(url); dynamic obj = JsonConvert.DeserializeObject(weatherjson); 動的温度= obj.main.temp; `` `Microsoft.CSharpのNuget Searchを実行し、インストールしました。ライブラリがビルドされるようになりました:) Q. Microsofctリファレンスがあれば、この.NetStandardライブラリをLinuxアプリで使用できますか?
デビッドジョーンズ

ありがとうございました!なんらかの理由で、これはメッセージからは明らかではありませんでした!私はずっと前に書かれたプロジェクトを微調整していますが、このリファレンスは恐ろしいものです。私が通常使用しているJavaの相対的な明快さに感謝します。
調整可能

82

他の誰かがこれを経験したかどうかはわかりませんが、dynamic型を利用するコードをいくつか追加し、VS2013でTypeScriptアプリケーションとして作成されたプロジェクトにWebAPIを組み込んだ後、突然このエラーに陥りました。Microsoft.CSharpへの参照を追加するだけで問題が解決しました。

これが他の誰かを助けることを願っています。


3
これはまさに私の問題でした。ダイナミックに追加すると、不思議なことにプロジェクトが壊れました。
SouthShoreAK 2016

2
同じです。.NetStandard2.0でダイナミックを使用して、コンパイルするためにC#Nugetをインストールする必要がありました
Mahmoud Hanafy

17

今日もこのような状況に遭遇しました。私の場合、.NET 4.0アプリケーションでNewton.Json.Net dll v3.5を参照していました。私はこのライブラリを使用していないことに気付いたので、参照から削除すると、コンパイラエラーは発生しなくなりました。

問題が解決しました!!!


2
Newton.Json.Net dllが問題を引き起こしました。
ジュリアンピエール

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

7

実際のエラーは、エラーの原因となる2.0アセンブリに次のコードが含まれていることが原因です。

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

上記のコードにより、.NET 2.0アセンブリは拡張メソッドを使用できます(.NET 2.0での拡張メソッドの使用を参照)。mscorlib.dll(4.0)には同じ名前空間の同じクラスが含まれているため、.NET 4.0をターゲットにして2.0アセンブリ(上記のコードを含む)を参照すると、コンパイラーが混乱します。

これを直した

  • 属性ターゲティング4.0なしで元の2.0アセンブリを再度コンパイルする
  • (明らかに)アセンブリを削除する
  • コンパイルするターゲットに3番目の拡張属性を追加する(参照されている定義を無効にするようです)

これはまさに私の問題です。私はあなたの指示を試し、ポストバックします。
John Peters

6

プロジェクトのどこかにこのコードを書くと、問題が解決する場合があります。わたしにはできる

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

このコードはどこに記述しますか?プロジェクトのルートにクラスを作成しましたか?
Alex

1
@Alex私はCompilerServiceと呼ばれるクラスをコードのあるプロジェクトのルートに追加し、それが機能しました。いいね!
ハルバード2016年

4

.NET 4.0プロジェクトから参照されるNLog.dll 2.0もこれを引き起こす可能性があります。


.NET 3.5から参照されるNLog for .NET 2.0は、同様のエラーを与えるようです。
ペドロ

3

おそらく、dynamic.NetStandard Classライブラリプロジェクトのキーワードを使用します。その場合Microsoft.CSharpは、プロジェクトのライブラリへの参照を追加する必要があります。それがあなたの問題を解決することを願っています。


2

正しい解決策はありませんが、データポイントを追加します。

私の場合、エラーはGoogleSearchAPINet20を参照することによって引き起こされています

これが起こることです:

  • 構築するソリューションを閉じます
  • もう一度ソリューションを開きます。それはまだ構築します
  • 変更を加えてビルドしようとすると、19個の「Missing compiler required member ...」エラーが表示されます
  • GoogleSearchAPINet20への参照を削除します
  • GoogleSearchAPINet20への参照を追加します
  • ソリューションを構築します。エラーなしで構築
  • Visual Studioが開いている限り、コードを変更したり、ソリューションで他のアクションを正しく実行したりできるようになりました
  • Visual Studioを閉じます
  • 手順1から繰り返す

私のソリューションではSystem.Core.dllをまったく参照しておらず、ターゲットフレームワークは.NET 4です。

私はこの時点で少しイライラしています...


1

.NET 4.0に対して非同期タスクを使用しようとすると、このエラーが発生しました。Target Frameworkを4.5.2に更新すると、問題が修正されました。


1

いくつかの非同期メソッドをwinformsプロジェクトに追加した後、同じ例外セットにヒットしました。.NETバージョンを4から4.5に上げる必要がありました。


0

私にとって、.net4.0プロジェクトでasync Task awaitを使用して非同期メソッドを追加すると問題が発生します!

以前のバージョンの.NET-Framework 4.5では、次のパッケージをインストールする必要があります。

Install-package Microsoft.Bcl.Async pre

または

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

NugetまたはNugetの詳細情報

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.