Ответ 1
Наконец-то мне удалось решить эту проблему.
Я отключил code optimization
в С# Express и решил проблемы. Еще самое странное, но поскольку мы используем старые инструменты и рамки, мы никого не можем обвинять.
Это самая странная проблема программирования, которую я видел в течение длительного времени.
Я использую 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 пару раз и также создал решение с нуля пару раз.
Наконец-то мне удалось решить эту проблему.
Я отключил code optimization
в С# Express и решил проблемы. Еще самое странное, но поскольку мы используем старые инструменты и рамки, мы никого не можем обвинять.
Просто хотел добавить свой опыт для этого... В моем случае я размещаю свой С# Web API на Azure, и я столкнулся с этим сообщением при попытке войти в мой API. Мне пришлось зайти на свой портал управления Azure (portal.azure.com), зайти в Службы приложений, выбрать свою программу Web API и нажать "Перезагрузить" на экране "Обзор". После этого программа снова заработала как обычно. Не нашел никаких дополнительных подсказок в моих журналах.
Попробуйте включить 32-разрядные приложения в вашем пуле приложений расширенные настройки.
У меня была эта проблема после обновления до Visual Studio 2017 v15.8.6. Проблема исчезла, когда я удалил атрибут assemblyPostProcessorType
в теге компиляции в web.config
.
Я иногда сталкивался с этой ошибкой после развертывания в веб-приложение Azure с использованием MSDeploy. Ошибка всегда исчезала после повторного развертывания.
Наша сборка и развертывание - это два разных шага: повторное развертывание каждый раз отправляет одни и те же файлы - это говорит о том, что проблема заключается не только в проблеме компилятора, как предложено в других частях ответов на этот вопрос.
Возможно, это ошибка в MSDeploy или в версии IIS, используемой для WebApps в Azure...
Согласно MSDN: "Обычно это указывает на ошибку в компиляторе, который сгенерировал программу".
Я бы начал, убедившись, что все обновления установлены в Windows,.NET и Visual Studio.
Вы также должны проверить Q312544 в поддержке Microsoft.
Такая проблема может быть вызвана ошибками в инструментах, управляющих IL сборки после компиляции, например, если вы используете Fody и его плагинов. По крайней мере, есть ошибка в Fody MethodDecorator, которая вызывает такой эффект, см. https://github.com/Fody/MethodDecorator/issues/8
Я решил эту проблему, выполнив следующие действия:
Если ваша проблема связана с 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
-uncheck "оптимизация кода" (см. ссылки на DLL) -Upgrade в .net framework 4.6
Если у вас возникла эта проблема, связанная с веб-приложениями Azure, - проверьте наличие установленного расширения Microsoft.ApplicationInsights.AzureWebSites
- или его понятное имя - расширение Application Insights для службы приложений Azure и удалите его через kudu.
Мы нашли это расширение было потенциально мешая MSDeploy толкает - шел процесс snapshotholder_x64.exe
работает под IIS w3wp.exe
процесса. Кто-то, вероятно, включил это расширение через портал Azure.
Из ниоткуда мы начали получать 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. Не нужно перекомпилировать или что-то еще. К счастью, это случается не слишком часто, может быть, раз в месяц или два.
Я просто столкнулся с этой проблемой сам. Несмотря на то, что VS создал для меня виртуальный каталог, в качестве языка по умолчанию использовался vb, но у меня есть приложение на С#. Изменение этого параметра решило проблему.
Это интересное исключение, с которым я столкнулся во время хостинга на IIS. Я решил это, обнаружив, что моя версия .NET Framework на IIS отличается от версии .NET Framework, которую использовал мой проект. Обратите внимание, что если у вас есть другие проекты /ddl, на которые есть ссылки, убедитесь, что вы также обновили их версию .NET Framework.