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

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

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Это изображение взято из ILSpy ( )

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

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

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

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

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

Другие вопросы по тегам