Ошибка "Отсутствует обязательный элемент компилятора", возникающая несколько раз, практически без изменений в коде
Сегодня, после развертывания некоторых изменений на сайте 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