Вопрос

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

Предопределенный тип 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 обратно в «Добавить функции…» на панели управления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top