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

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Это фиксировало проблему, с которой мне приходилось ссылаться на файл Microsoft.Scripting.Core.dll, но содержала некоторые типы, которые противоречили mscorlib.dll. Я изменил свойство "Псевдонимы" как "Третье", а не "глобальное", и это зафиксировало предупреждение.

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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