Странное предупреждение об 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 в "Добавить функции..." на панели управления.