странное предупреждение о ExtensionAttribute - PullRequest
32 голосов
/ 13 февраля 2009

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

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

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

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

Ответы [ 6 ]

21 голосов
/ 13 февраля 2009

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

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

12 голосов
/ 13 февраля 2009

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

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

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

11 голосов
/ 29 апреля 2011

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

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

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

1 голос
/ 05 марта 2014

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

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

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

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

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

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

0 голосов
/ 02 июня 2015

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

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

0 голосов
/ 13 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...