Ошибка "отсутствует необходимый элемент компилятора" возникает несколько раз почти без изменений кода
сегодня после развертывания некоторых изменений на сайте C# MVC, который я запускаю, я вернулся, чтобы сделать еще несколько изменений и наткнулся на эту ошибку:
отсутствует компилятор требуется член системы.Во время выполнения.CompilerServices.ExtensionAttribute..ктор
ошибка немного расплывчата (кроме ее описания, очевидно), поскольку она не дает мне файл, строку или столбец для ссылки, только проект. Кроме того, он выдает ошибку в общей сложности 20 раз. Я только сделал три изменения в коде между тем, как я развернул (он был полностью функциональным в то время) и сейчас. Я вернул свои изменения, и он все еще бросает ту же ошибку, которая не имеет смысла для меня.
Я не нашел много информации об этой ошибке на SO или Google, кроме ребята решение и несколько ссылок на некоторые ошибки проекта Mono (я не использую Mono). Решение, которое дает парень выше, требует добавления определения класса, которое позволит компилятор для разрешения ссылки. Я не особенно хочу делать это, потому что мне не нужно было делать это до этого момента, и это будет просто мутить мой код.
просто любопытно, если кто-то сталкивался с этим раньше. Заранее спасибо!
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 { } }
У меня нет правильного решения, но я добавлю свою точку данных:
в моем случае ошибка вызвана ссылкой на GoogleSearchAPINet20
вот что происходит:
- Я закрываю решение, которое строит
- я снова открываю решение. Он все еще строит
- как только я делаю какие-либо изменения и пытаюсь построить, я получаю 19 "недостающий компилятор требуется член ..."ошибки
- Я удаляю ссылку на GoogleSearchAPINet20
- я добавляю обратно ссылку на GoogleSearchAPINet20
- Я строю решение. Он строит без ошибок
- теперь я могу вносить изменения в код, создавать или выполнять любые другие действия с решением правильно, пока моя Visual Studio открыта
- Я закрываю Visual Studio
- повторить с первого шага
Я не ссылаюсь на систему.Ядро.dll в моем решении вообще и моя целевая платформа .NET 4.
Я немного раздражен в этот момент ...
получил эту ошибку при попытке использовать асинхронные задачи против .NET 4.0. Обновление целевой платформы до 4.5.2 устранило проблему.
Я попал в тот же набор исключений после добавления некоторых асинхронных методов в проект winforms. Мне нужно было поднять мою версию .NET с 4 до 4,5