Ошибка "Отсутствует обязательный элемент компилятора", возникающая несколько раз, практически без изменений в коде

Сегодня, после развертывания некоторых изменений на сайте C# MVC, который я запускаю, я вернулся, чтобы внести дополнительные изменения, и наткнулся на эту ошибку:

Отсутствует обязательный член компилятора System.Runtime.CompilerServices.ExtensionAttribute..ctor

Ошибка немного расплывчата (очевидно, кроме описания), поскольку она не дает мне файл, строку или столбец для ссылки, а только проект. Также выдает ошибку в общей сложности 20 раз. Я сделал только три изменения в коде между моментом развертывания (он был полностью функциональным в то время) и сейчас. Я отменил свои изменения, и это все еще вызывает ту же ошибку, которая не имеет смысла для меня.

Я не нашел много информации об этой ошибке в SO или Google, кроме этого решения от парней, и пару ссылок на некоторые ошибки проекта Mono (я не использую Mono). Решение, которое дает парень выше, требует добавления определения класса, которое позволит компилятору разрешить ссылку. Я не особенно хочу делать это, потому что мне не нужно было делать это до этого момента, и это просто испортит мой код.

Просто любопытно, сталкивался ли кто-нибудь с этим раньше. Заранее спасибо!

11 ответов

Решение

Эта ошибка обычно означает, что ваш проект компилируется в.NET 2.0 или вы не ссылаетесь на правильную версию System.Core.dll

Почти повторяющийся вопрос см. В разделе " Ошибка при использовании методов расширения в C#".

В моем случае это было потому, что проект не ссылался Microsoft.CSharp, Как только я добавил ссылку на эту сборку, она скомпилировалась просто отлично.

Я не знаю, сталкивался ли кто-нибудь еще с этим, но я внезапно попал в эту ошибку после добавления некоторого кода, использующего dynamic типы и включение WebAPI в проект, который возник как приложение TypeScript в VS2013. Простое добавление ссылки на Microsoft.CSharp решило мою проблему.

Надеюсь, это поможет кому-то еще.

Я столкнулся с этой ситуацией и сегодня. В моем случае я ссылался на dll v3.5 Newton.Json.Net в моем приложении.NET 4.0. Я понял, что даже не использовал эту библиотеку, поэтому, как только я удалил ее из своих ссылок, она больше не давала мне ошибку компилятора.

Задача решена!!!

Фактическая ошибка происходит из-за того, что ваша сборка 2.0, которая вызывает ошибку, содержит следующий код:

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

Вышеприведенный код позволяет сборке.NET 2.0 использовать методы расширения (см. Использование методов расширения в.NET 2.0?). Хотя это сбивает с толку компилятор, если вы ориентируетесь на.NET 4.0 и ссылаетесь на сборку 2.0 (содержащую приведенный выше код), поскольку mscorlib.dll(4.0) содержит тот же класс в том же пространстве имен.

Я исправил это

  • снова скомпилировав исходную сборку 2.0 без указания атрибута 4.0
  • сняв сборку (очевидно)
  • добавив третий атрибут расширения в цель, которую вы компилируете (похоже, она отменяет определения, на которые есть ссылки)

Возможно, вы используете dynamicключевое слово В проекте библиотеки классов.NetStandard. Если это так, вам нужно добавить ссылку наMicrosoft.CSharpбиблиотека в проекте. Надеюсь, это решит вашу проблему.

Написание этого кода где-то в вашем проекте может решить вашу проблему. Меня устраивает

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

NLog.dll 2.0, на который ссылается проект.NET 4.0, также может вызывать это.

У меня нет правильного решения, но я добавлю свою точку данных:

В моем случае ошибка вызвана ссылкой на GoogleSearchAPINet20

Вот что происходит:

  • Я закрываю решение, которое строит
  • Я снова открываю решение. Он все еще строит
  • Как только я делаю какие-либо изменения и пытаюсь собрать, я получаю 19 ошибок "Missing compiler required member ..."
  • Я удаляю ссылку на GoogleSearchAPINet20
  • Добавляю обратно ссылку на GoogleSearchAPINet20
  • Я строю решение. Строит без ошибок
  • Теперь я могу корректно вносить изменения в код, создавать или выполнять любые другие действия с решением, если моя Visual Studio открыта
  • Я закрываю Visual Studio
  • Повторите с первого шага

Я вообще не ссылаюсь на System.Core.dll в своем решении, и моя целевая среда -.NET 4.

Я немного раздражен в этот момент...

Получил эту ошибку при попытке использовать асинхронные задачи против.NET 4.0. Обновление Target Framework до 4.5.2 решило проблему.

Я столкнулся с тем же набором исключений после того, как добавил несколько асинхронных методов в проект winforms. Мне нужно было увеличить мою версию.NET с 4 до 4,5

Для меня проблема возникает, когда я добавляю асинхронный метод с асинхронной задачей в моем проекте.net4.0.

В предыдущих версиях.NET-Framework 4.5 необходимо установить этот пакет:

Install-package Microsoft.Bcl.Async –pre

или же

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

больше информации о Nuget или Nuget

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