Исправление в IIS 7.5 Была предпринята попытка загрузить программу с неправильным форматом? - PullRequest
41 голосов
/ 18 июля 2011

Возникла необычная проблема: выдается ошибка «Была предпринята попытка загрузить программу с неверным форматом»?У меня есть два идентичных веб-сайта на одном сервере IIS, и моя конфигурация сборки работает для одного из них, но не для другого.

Мое веб-приложение C # MVC 2 может быть развернуто на двух веб-сайтах, которые находятся на одном веб-сервере IIS 7.5 (x64).Один - это действующий сайт (развернутый с использованием конфигурации выпуска), второй - бета-сайт (развернутый с использованием новой конфигурации бета-версии, созданной только для этого проекта).Кодовая база для обоих проектов одинакова.У них разные конфигурации сборки, но настройки внутри конфигураций идентичны.

Развертывание конфигурации выпуска на веб-сайте по умолчанию / my_app работает отлично.

Развертывание бета-конфигурации в Beta / my_app развертывается, нопри загрузке сайта (любой страницы) я получаю исключение неправильного формата.

Я не могу понять, почему развертывание с точно такими же настройками конфигурации будет работать для одного веб-сайта, но не для другого (на том же веб-сервере).Мои серверы и устройства разработки являются 64-битными, и оба веб-сайта имеют одинаковые настройки пула приложений (.NET 4, встроенный).

Как мне найти / исправить эту проблему?Желательно без необходимости иметь разные настройки конфигурации для каждого сайта.И желательно без необходимости изменять конфигурацию релиза, так как она работает, и я не хочу рисковать ее изменением.

Два веб-сайта:

Default Website/my_app
Beta/my_app

Диспетчер конфигурации для выпуска имеетэти настройки:

release build configuration

Диспетчер конфигурации для бета-версии имеет точно такие же настройки:

beta build configuration

Исключение составляет:

Could not load file or assembly 'MyApp.Domain.Model' or one of its dependencies. 
An attempt was made to load a program with an incorrect format.

Stack Trace:

[BadImageFormatException: Could not load file or assembly 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192
   System.Reflection.Assembly.Load(String assemblyString) +35
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +123

[ConfigurationErrorsException: Could not load file or assembly 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11479520
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484
   System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +79
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334
   System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1087

[HttpException (0x80004005): Could not load file or assembly 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11612256
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4842149

Я видел, что на SO есть несколько вопросов о том, что "Была сделана попытка загрузить программу с неверным форматом", но я не считаю, что это дубликат.Это уникальная ситуация, когда конфиг работает нормально на одном сайте, но не на другом, используя одни и те же параметры конфигурации и один и тот же веб-сервер для обоих.

Ответы [ 2 ]

81 голосов
/ 20 июля 2011

Обнаружена проблема. Решение заключается в том, как настроены два AppPools:

  • Веб-сайт по умолчанию / my_app использует DefaultAppPool, где параметр Включить 32-битные приложения равен TRUE
  • Beta / my_app -> BetaAppPool использует параметр Включить 32-разрядные приложения - ЛОЖЬ

Изменение параметра BetaAppPool на значение Включить 32-разрядные приложения на значение ИСТИНА устранило эту проблему.

Решение найдено@ Ответьте на этот вопрос: C # Entity Framework 4 Common Language Runtime обнаружил недопустимую ошибку программы?

2 голосов
/ 18 июля 2011

В вашем месте развертывания x64 у вас есть dll x86.

Не делайте этого.Это не работает.

...