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

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

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

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

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

Просто интересно, если кто-то сталкивался с этим раньше. Спасибо заранее!

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

Проблема решена!!!

Ответ 5

Фактическая ошибка возникает из-за того, что ваша сборка 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
  • удалив сборку (очевидно)
  • добавив третий атрибут расширения в компиляцию цели (она, похоже, отменяет указанные определения)

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

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

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

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

Ответ 9

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

Ответ 10

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