web-dev-qa-db-ja.com

ExtensionAttributeに関する奇妙な警告

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

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

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

コンパイラエラーコードは CS1685

32
JoelFan

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

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

21
ShuggyCoUk

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

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

この警告は無視してかまいません。

12
JaredPar

私はShuggyCoUkに同意します。最善の行動は、問題のあるdllを削除することです。しかし、それは不可能かもしれません。

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

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

11
Ron

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

私の場合、問題はAssemblyMono.Cecilでした。

ローカル参照からnugetに移行すると、NHibernate参照を追加すると、パッケージによってこの参照が自動的に追加されます。

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

取り外して幸せに!

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

1

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

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

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

0
David Basarab

誤って4.5ではなく.NET3.5でIISをインストールすることにより、このエラーをトリガーしました。

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

0
Ruskin