Предупреждение о компиляторе С# 1685

Итак, (по-видимому) из ничего, мой проект начинает получать предупреждение о компиляторе 1685:

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

В преломлении я исследовал статью MSDN, чтобы выяснить ее причину. Вот информация, которую я нашел:

Ссылка на Visual С#: ошибки и Предупреждение о компиляторе предупреждений (уровень 1) CS1685

Сообщение об ошибке Предопределенный тип 'Имя типа System.type' определено в несколько сборок в глобальном псевдоним; используя определение из "Файл Имя

Эта ошибка возникает, когда предопределенная тип системы, такой как System.int32, является найденный в двух сборках. Один из способов может случиться, если вы ссылаетесь mscorlib из двух разных мест, например, попытку запуска программы. Рамочные версии 1.0 и 1.1 бок о бок.

Компилятор будет использовать определение только от одной из сборок. компилятор ищет только глобальные псевдонимы, не ищет библиотеки, определенные /Справка. Если вы указали /nostdlib, компилятор будет искать для объекта, и в будущем все поиски предопределенных типов в файл, в котором он нашел объект.

Теперь я действительно почесываю голову.

  • У меня нет двух разных версии .NET Framework (если вы не считаете 2.0 и 3.5).

  • Я не ссылаюсь ни на какие причудливые собрания, которые могли бы сделать меня подозрительными.

  • Я не помню внесения каких-либо изменений в мое приложение, которое подстегнет это изменение.

  • Я проверил, что все компоненты нацелены на версию .NET Framework версии 2.0.50727.

Я открыт для предложений или идей о том, как исправить это. Я рассматриваю предупреждения как ошибки, и это сводит меня с ума.

Что действительно меня беспокоит, так это то, что я не знаю, почему это происходит. Вещи, которые произойдут, должны иметь очевидную причину, и я должен знать, почему они произошли. Если я не могу это объяснить, я не могу точно исправить это. Угадайка никогда не бывает удовлетворительной.

Приложение является простым, состоящим из библиотеки классов и приложения форм Windows.

  • Библиотека библиотеки классов С#, предоставляющая базовые функции, инкапсулирующие доступ к базе данных. Эта DLL ссылается на следующие компоненты:

    • Система
    • System.Core
    • System.Core.Data​​li >
    • System.Data​​li >
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq
  • Приложение С# Windows Forms, предоставляющее интерфейс. Это приложение ссылается на следующие компоненты:

    • CleanCode
    • CleanCodeControls (оба из них поддерживают поддержку синтаксиса и локально построены против .NET 3.5).
    • LinqBridge
    • Roswell.Framework(библиотека классов выше)
    • Система
    • System.Core
    • System.Data​​li >
    • System.Data.DataSetExtensions
    • System.Data.OracleClient
    • System.Deployment
    • System.Design
    • System.Drawing
    • System.Windows.Forms
    • System.Xml
    • System.Xml.Linq

Сообщите мне, если вам нужна дополнительная информация, и я с радостью предоставит ее.

Ответ 1

LINQBridge сразу вызывает подозрение. Цель этого заключается в предоставлении атрибутов/методов расширения и т.д. Для пользователей 2.0. Если у вас есть 3.5 (System.Core.dll), не используйте LINQBridge. Если вам понадобится LINQBridge в 3.5 для какой-то неясной причины (и я не могу думать об этом), тогда вам, возможно, придется использовать псевдоним extern. Но я действительно сомневаюсь, что вам это нужно!

Ответ 2

Еще один простой способ проверить: В вашем коде временно используйте класс. Пример:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

При построении это приведет к ошибке:

Тип 'System.Runtime.CompilerServices.ExtensionAttribute' существует в обоих случаях: c:\Program Files\Reference Ассембли \Microsoft\Framework\v3.5\System.Core.dll 'и.....

И немедленно покажите вам 2 источника, вызывающие конфликт.

Ответ 3

Марк почти правдоподобен. Здесь можно проверить
  • Открыть Reflector.exe
  • Добавить все несистемные сборки
  • F3 и найдите ExtensionAttribute

Если он появляется куда угодно, кроме System.Core, тогда вы знаете, откуда он.

Ответ 4

Другим решением этой проблемы является использование глобального псевдонима для всей сборки:

Ссылка → Свойства → Псевдонимы → Заменить 'global' на что-то еще

Ответ 5

FYI: У меня была такая же проблема, и я смог ее решить, используя команду Resharper "Оптимизировать ссылки", а затем удалив все неиспользуемые ссылки. Не совсем уверен, почему это сработало, но это произошло.

Ответ 6

Другое решение для этой проблемы = > Проект правой кнопки мыши → Свойства → Сборка → Обработка предупреждений как ошибок → Нет