странное предупреждение о ExtensionAttribute
-
23-08-2019 - |
Вопрос
Я получаю странное предупреждение:
Предопределенный тип System.Runtime.CompilerServices.ExtensionAttribute определен в нескольких сборках в глобальном псевдониме;используя определение из «c:\Program Files eference Assemblies\Microsoft\Framework\v3.5\System.Core.dll»
Номер строки не указан, поэтому сложно понять, о чем идет речь.
Код ошибки компилятора: CS1685
Решение
Используете ли вы чью-то dll (или свою собственную), которая сама реализовала этот атрибут (с точно таким же именем) как средство использования некоторых функций С# 3.0 в средах выполнения до .Net 3.5?(Обычный трюк)
Это вероятная причина.Поскольку он использует правильный (MS в GAC), это не проблема, хотя вам следует найти другой и удалить его.
Другие советы
Расширение (правильного) ответа ShuggyCoUk
По правде говоря, не имеет значения, какая версия атрибута используется (GAC, третья часть и т. д.).Все, что имеет значение, это то, что компилятор C#/VB может найти некоторый атрибут с правильным именем.Атрибут не имеет никакой функциональной цели в коде.Он существует исключительно для того, чтобы сообщить компилятору: «Эй, это метод расширения».
Вы можете смело игнорировать это предупреждение.
Я согласен с ShuggyCoUk, что лучший вариант действий — попытаться удалить вызывающую ошибку DLL.Хотя это может оказаться невозможным.
Другой способ устранить двусмысленность, на которую жалуется компилятор, — изменить псевдоним указанной dll.В вашем проекте в папке «Ссылки» если вы щелкнете ссылку на dll, вы увидите свойство «Псевдонимы».По умолчанию это «глобальный», что позволяет вам делать такие вещи, как «global::SomeNamespace.SomeType».Возможно, вы просто сможете изменить псевдоним на что-то другое.
Это устранило проблему, с которой мне нужно было ссылаться на Microsoft.Scripting.Core.dll, но она содержала некоторые типы, конфликтующие с mscorlib.dll.Я изменил свойство Aliases на «ThirdParty» вместо «global», и это устранило предупреждение.
У меня та же проблема.
В моем случае проблема была в сборке Mono.Cecil.
При переходе с локальных ссылок на nuget, когда я добавляю ссылки NHibernate, пакет автоматически добавляет эту ссылку.
Эта ссылка была удалена, и мой проект скомпилирован заново.
Удалите его и будьте счастливы!!
Это изображение было взято с сайта ILSpy ( http://i.stack.imgur.com/Qyd5o.png )
Компилятор не знает, какой System.Runtime.CompilerServices.ExtensionAttribute
Таким образом, используется определение из c:\Program Files eference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
Используемая вами .dll может иметь такое же расширение.
Я вызвал эту ошибку, случайно установив IIS с .NET 3.5 вместо 4.5.
Исправлением было добавление версии 4.5 обратно в «Добавить функции…» на панели управления.