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


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

отсутствует компилятор требуется член системы.Во время выполнения.CompilerServices.ExtensionAttribute..ктор

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

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

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

11 64

11 ответов:

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

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

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

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

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

Я столкнулся с этой ситуацией и сегодня. В моем случае я ссылался на Newton.Json.Net dll v3.5 в моем приложении .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 снова без атрибута targeting 4.0
  • путем удаления сборки (очевидно)
  • добавляя третий атрибут расширения в цель, которую вы компилируете (похоже, он отменяет ссылки на определения)

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

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

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

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

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

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

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

Я не ссылаюсь на систему.Ядро.dll в моем решении вообще и моя целевая платформа .NET 4.

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

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

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

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

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

Install-package Microsoft.Bcl.Async –pre

или

Install-Package Microsoft.CompilerServices.AsyncTargetingPack

подробнее о Nuget или Nuget