InvalidProgramException/Common Language Runtime обнаружил недопустимую программу

Это самая странная проблема программирования, которую я видел в течение длительного времени.

Я использую Microsoft Visual C# 2010 Express, C# и .NET 2.0 для разработки приложения. Это приложение ссылается на пару dll/сборок (все эти библиотеки генерируются на моей машине).

Ниже приведена часть кода (это все основные вещи):

public class PowerManagement
{

    [TestCase]
    public void PrepareTest(){
        // Configure according to pre-conditions
        Preconditions precondition = new Preconditions();
        precondition.SetupPreconditions();
            ...
    }

    [TestCase]
    public void PerformTest(){
        TestcaseData testcaseData = new TestcaseData();

        // Set Trigger and perform check
        switch (testcaseData.triggerNumber){
            case (1):
                if ((new Trigger1(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            ...
            case (4):
                if ((new Trigger4(testcaseData)).Validate() != 1)
                    Report.TestStepFail("failed");
                break;
            default:
                Report.TestStepFail("Not yet implemented");
                break;
        }
    }
}

Это приложение затем сгенерируется в dll из Visual C# 2010 Express и используется в другом месте, и все в порядке. Проблема возникает, когда я добавляю другой случай в оператор switch (см. Ниже)

        ...
        case (4):
            if ((new Trigger4(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        case (5):
            if ((new Trigger5(testcaseData)).Validate() != 1)
                Report.TestStepFail("failed");
            break;
        default:
            Report.TestStepFail("Not yet implemented");
            break;

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

A .NET exception (InvalidProgramException) occured in the module PowerManagement
Error message: Common Language Runtime detected an invalid program.
Throwing method: PowerManagement.PerformTest

(проблема возникает, даже если я скопирую case(4) и вставляю ее как новый случай, поэтому она не имеет ничего общего с Trigger5 -class)

Что здесь происходит? Я просмотрел другие InvalidProgramException и Common Language Runtime в Stackoverflow, но ни один из них не был связан.

Я знаю, что эта проблема странная, поэтому, пожалуйста, дайте мне знать, и я предоставлю дополнительную информацию. Я использую 64-битную машину Windows 8, если это имеет значение. Я уже проверял обновления для VS и .NET обновлений. Я havet также регенерировал все dlls пару раз и также создал решение с нуля пару раз.

Ответ 1

Наконец-то мне удалось решить эту проблему. Я отключил code optimization в С# Express и решил проблемы. Еще самое странное, но поскольку мы используем старые инструменты и рамки, мы никого не можем обвинять.

Ответ 2

Просто хотел добавить свой опыт для этого... В моем случае я размещаю свой С# Web API на Azure, и я столкнулся с этим сообщением при попытке войти в мой API. Мне пришлось зайти на свой портал управления Azure (portal.azure.com), зайти в Службы приложений, выбрать свою программу Web API и нажать "Перезагрузить" на экране "Обзор". После этого программа снова заработала как обычно. Не нашел никаких дополнительных подсказок в моих журналах.

Ответ 4

У меня была эта проблема после обновления до Visual Studio 2017 v15.8.6. Проблема исчезла, когда я удалил атрибут assemblyPostProcessorType в теге компиляции в web.config.

Ответ 5

Я иногда сталкивался с этой ошибкой после развертывания в веб-приложение Azure с использованием MSDeploy. Ошибка всегда исчезала после повторного развертывания.

Наша сборка и развертывание - это два разных шага: повторное развертывание каждый раз отправляет одни и те же файлы - это говорит о том, что проблема заключается не только в проблеме компилятора, как предложено в других частях ответов на этот вопрос.

Возможно, это ошибка в MSDeploy или в версии IIS, используемой для WebApps в Azure...

Ответ 6

Согласно MSDN: "Обычно это указывает на ошибку в компиляторе, который сгенерировал программу".

Я бы начал, убедившись, что все обновления установлены в Windows,.NET и Visual Studio.

Вы также должны проверить Q312544 в поддержке Microsoft.

Ответ 7

Такая проблема может быть вызвана ошибками в инструментах, управляющих IL сборки после компиляции, например, если вы используете Fody и его плагинов. По крайней мере, есть ошибка в Fody MethodDecorator, которая вызывает такой эффект, см. https://github.com/Fody/MethodDecorator/issues/8

Ответ 8

Я решил эту проблему, выполнив следующие действия:

  • Переименуйте C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.exe в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.exe.broken
  • Переименуйте C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Performance Tools\vsinstr.legacy.exe в C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Team Tools\Инструменты повышения производительности \vsinstr.exe
  • Восстановить решение

Ответ 9

Если ваша проблема связана с web api dotnetcore, развернутым в приложении Azure, то это может быть связано с пониманием приложения. Установка понимания приложения на уровне лезвия должна решить проблему. Также обратите внимание, что, похоже, существует нерешенная проблема с настройкой его на уровне блейда в качестве recommended параметров по сравнению с basic. Основным является ценность, которая работает.

Эта проблема связана с развертыванием веб-API в качестве приложения API в Azure. Первоначальный запрос к любой конечной точке приведет к ожидаемому ответу; однако последующие запросы будут возвращать ту же ошибку Common Language Runtime. Я выяснил, что проблема началась, когда я включил Рекомендованный уровень сбора на блейде Application Insights в моем веб-приложении. Я установил рекомендованные и включил все переключатели. Отмена этого изменения остановила ошибку. Для справки, API, который я использую, работает под управлением Microsoft.ApplicationInsights 2.8.1.

Для справки: https://github.com/dotnet/coreclr/issues/18323

Ответ 10

-uncheck "оптимизация кода" (см. ссылки на DLL) -Upgrade в .net framework 4.6

Ответ 11

Если у вас возникла эта проблема, связанная с веб-приложениями Azure, - проверьте наличие установленного расширения Microsoft.ApplicationInsights.AzureWebSites - или его понятное имя - расширение Application Insights для службы приложений Azure и удалите его через kudu.

enter image description here

Мы нашли это расширение было потенциально мешая MSDeploy толкает - шел процесс snapshotholder_x64.exe работает под IIS w3wp.exe процесса. Кто-то, вероятно, включил это расширение через портал Azure.

enter image description here

Ответ 12

Из ниоткуда мы начали получать XXX webservice Exception, System.InvalidProgramException: Common Language Runtime detected an invalid program.

Скопировал скомпилированный сайт в другую среду - работает просто отлично. Скопировал на другой сервер - работает просто отлично.

Я заметил, что это исключение началось при перезагрузке сервера (либо перезагрузке, либо сбросе пула приложений). Исследуя эту проблему, я заметил комментарий Брайана Райхла 6 июня 16 года в 12:33.

Я ожидаю, что рассогласование по битности приведет к исключению BadImageFormatException, а не к InvalidProgramException, описанному в вопросе.

Я не был знаком с исключением InvalidProgramException но я был знаком с BadImageFormatException и симптом очень похож на тот, который я получаю с проблемой BadImageFormatException. Я не могу сказать на 100%, почему происходит какое-либо исключение, текущая теория выполнения - это 32-разрядное приложение, работающее на 64-разрядной машине, но мы не смогли это доказать и не смогли исправить. Включение 32-разрядных приложений в пул приложений не устранило проблему.

Единственное исправление, которое мы знаем, хотя и временное, - это просто перезапустить App Pool. Не нужно перекомпилировать или что-то еще. К счастью, это случается не слишком часто, может быть, раз в месяц или два.

Ответ 13

Я просто столкнулся с этой проблемой сам. Несмотря на то, что VS создал для меня виртуальный каталог, в качестве языка по умолчанию использовался vb, но у меня есть приложение на С#. Изменение этого параметра решило проблему. enter image description here

Ответ 14

Это интересное исключение, с которым я столкнулся во время хостинга на IIS. Я решил это, обнаружив, что моя версия .NET Framework на IIS отличается от версии .NET Framework, которую использовал мой проект. Обратите внимание, что если у вас есть другие проекты /ddl, на которые есть ссылки, убедитесь, что вы также обновили их версию .NET Framework.