33

奇妙な警告が表示されます:

事前定義されたタイプ'System.Runtime.CompilerServices.ExtensionAttribute'は、グローバルエイリアスの複数のアセンブリで定義されています。'c:\ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5\System.Core.dll'の定義を使用

行番号が指定されていないため、それが何であるかを理解するのは困難です。

コンパイラのエラーコードはCS1685です。

4

6 に答える 6

21

.Net 3.5以前のランタイムでいくつかのc#3.0機能を使用する手段として、この属性(まったく同じ名前)自体を実装した誰かのdll(または自分のdll)を使用していますか?(一般的なトリック)

これが考えられる原因です。正しいもの(GACのMSのもの)を使用しているので、もう一方を探して削除する必要がありますが、これは問題ではありません。

于 2009-02-13T17:20:19.140 に答える
12

ShuggyCoUkの(正しい)答えを拡張する

正直なところ、どのバージョンの属性が使用されているかは問題ではありません (GAC、3 番目の部分など...)。重要なのは、C#/VB コンパイラが正しい名前の属性を見つけることができるということだけです。この属性は、コードでは機能的な目的を果たしません。純粋にコンパイラに「これは拡張メソッドです」と伝えるために存在します。

この警告は無視しても問題ありません。

于 2009-02-13T17:22:31.960 に答える
11

問題のある dll を削除することが最善の方法であるという ShuggyCoUk の意見に同意します。しかし、それは不可能かもしれません。

コンパイラが不平を言っているあいまいさを解決する別の方法は、参照されている dll のエイリアスを変更することです。プロジェクトの References フォルダーで、参照されている dll をクリックすると、Aliases プロパティが表示されます。デフォルトでは、これは「global」であり、「global::SomeNamespace.SomeType」などを実行できます。エイリアスを別のものに変更するだけでよい場合があります。

これにより、Microsoft.Scripting.Core.dll を参照する必要があるという問題が修正されましたが、mscorlib.dll と競合する型がいくつか含まれていました。Aliases プロパティを「global」ではなく「ThirdParty」に変更したところ、警告が修正されました。

于 2011-04-28T21:45:05.937 に答える
1

私も同じ問題を抱えてる。

私の場合、問題はアセンブリ Mono.Cecil でした。

ローカル参照からナゲットへの移行、NHibernate 参照を追加すると、パッケージはこの参照を自動的に追加します。

この参照は削除され、プロジェクトを再度コンパイルしました。

脱いで幸せになろう!!

この画像は ILSpy から取得したものです ( http://i.stack.imgur.com/Qyd5o.png )

于 2014-03-05T06:02:16.987 に答える
0

誤って .NET 4.5 ではなく .NET 3.5 を使用して IIS をインストールしたことが原因で、このエラーが発生しました。

修正は、コントロール パネルの [機能の追加] で 4.5 を追加することでした。

于 2015-06-02T14:13:45.693 に答える
0

コンパイラは System.Runtime.CompilerServices.ExtensionAttribute を認識していません

したがって、c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll' の定義を使用しています。

使用している .dll の拡張子が同じである可能性があります。

于 2009-02-13T17:22:08.623 に答える