странное предупреждение о ExtensionAttribute

Получаю странное предупреждение:

Предопределенный тип System.Runtime.CompilerServices.ExtensionAttribute определен в нескольких сборках в глобальном псевдониме; используя определение из 'c: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll'

Номер строки не указан, поэтому сложно понять, о чем идет речь.

Код ошибки компилятора: CS1685.


person JoelFan    schedule 13.02.2009    source источник
comment
Связано: stackoverflow.com/questions/11025100/   -  person Lilith River    schedule 14.06.2012
comment
Ответ, получивший наибольшее количество голосов (а не принятый ответ), предлагает общий способ решения этого предупреждения независимо от того, какой тип вызывает проблему: stackoverflow .com / a / 6518336/27846   -  person pettys    schedule 15.06.2015


Ответы (6)


Используете ли вы чью-то dll (или вашу собственную), в которой реализован этот атрибут (с точно таким же именем) как средство использования некоторых функций C # 3.0 в среде выполнения до .Net 3.5? (Обычный трюк)

Это вероятная причина. Поскольку он использует правильный (MS в GAC), это не проблема, хотя вам следует выследить другой и удалить его.

person ShuggyCoUk    schedule 13.02.2009
comment
В моем случае это был Newtonsoft.Json.dll версии 7.0.1.18503. Как ни странно, это предупреждение появилось только тогда, когда я обновил TargetFrameworkVersion своего проекта с v4.5 до v4.5.1. - person Jonathan; 27.05.2015
comment
Библиотеки, нацеленные на несколько версий платформы .NET, часто реализуют этот атрибут в своем коде, когда они нацелены на более старые платформы .NET, чтобы они могли писать методы расширения, которые используются во всех версиях их библиотеки. Как заявляет @JaredPar, это просто сказать компилятору, что это метод расширения. Например, этот атрибут определен в версии .NET 2.0 NUnit 3.0 и выдает это предупреждение, если вы ориентируетесь на более новую платформу .NET, которая также включает этот атрибут. - person Rob Prouse; 17.08.2015
comment
Это предупреждение также вызывает проблема с адаптером nunit test. - person Frédéric; 14.10.2016

Расширение (правильный) ответ ShuggyCoUk

По правде говоря, не имеет значения, какая версия атрибута используется (GAC, 3-я часть и т. Д.). Важно лишь то, что компилятор C # / VB может найти атрибут с правильным именем. Атрибут не служит функциональной цели в коде. Он существует исключительно для того, чтобы сообщить компилятору: «Эй, это метод расширения».

Вы можете игнорировать это предупреждение.

person JaredPar    schedule 13.02.2009

Я согласен с ShuggyCoUk в том, что лучший способ действий - попытаться удалить проблемную dll. Однако это может быть невозможно.

Другой способ устранить двусмысленность, на которую жалуется компилятор, - это изменить псевдоним dll, на которую имеется ссылка. В вашем проекте в папке «Ссылки», если вы щелкнете по указанной DLL, вы увидите свойство «Псевдонимы». По умолчанию это «global», что позволяет вам делать такие вещи, как «global :: SomeNamespace.SomeType». Возможно, вы просто сможете изменить псевдоним на что-нибудь другое.

Это устранило мою проблему, когда мне нужно было ссылаться на Microsoft.Scripting.Core.dll, но он содержал некоторые типы, которые конфликтовали с mscorlib.dll. Я изменил свойство «Псевдонимы» на «ThirdParty» вместо «global», и это устранило предупреждение.

person Ron    schedule 28.04.2011

У меня точно такая же проблема.

В моем случае проблема заключалась в сборке Mono.Cecil.

При переходе с локальных ссылок на nuget, когда я добавляю ссылки NHibernate, пакет автоматически добавляет эту ссылку.

Эта ссылка была удалена, и мой проект снова был скомпилирован.

Удалите и будьте счастливы !!

Это изображение было взято из ILSpy (http://i.stack.imgur.com/Qyd5o.png < / а>)

person Luiz Carlos Faria    schedule 05.03.2014
comment
Та же проблема возникает в старых библиотеках Newtonsoft.Json. - person mikeschuld; 17.01.2015

Компилятор не знает, какой атрибут System.Runtime.CompilerServices.ExtensionAttribute

Таким образом, он использует определение из c: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Core.dll '

Используемая вами .dll может иметь такое же расширение.

person David Basarab    schedule 13.02.2009
comment
Иногда он использует определение из сторонней библиотеки, помеченное как «внутреннее», а затем помечает ошибку компиляции позже, когда не может найти тип. Это похоже на то, что средство разрешения конфликтов игнорирует правила области видимости. - person Lilith River; 07.06.2012

Я вызвал эту ошибку, случайно установив IIS с .NET 3.5 вместо 4.5.

Исправление заключалось в том, чтобы добавить 4.5 обратно в «Добавить функции ...» на панели управления.

person Ruskin    schedule 02.06.2015