64-разрядное приложение ASP.NET MVC не запускается

Прежде всего, мне ранее удавалось запустить одно из моих 64-битных тестовых веб-приложений на этой машине (когда я создавал прототип для этого проекта). Я работал в течение нескольких недель в 32-разрядной версии и понял, что мне нужно переключить приложение на 64-разрядную версию, и когда я это сделал (установил целевую платформу на x64 в проекте) и повторно развернул ее, оно перестало работать.

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

Я публикую и отлаживаю под IIS.

Я получаю исключение BadImageFormatException с сообщением: "Не удалось загрузить файл или сборку "GEMS.Web" или одну из его зависимостей. Была предпринята попытка загрузить программу с неправильным форматом".

Это приложение ссылается как на 64-разрядные, так и на 32-разрядные сборки. Я установил для параметра «Включить 32-разрядные приложения» значение true в пуле приложений в IIS.

Я использую VS.NET 2012, IIS 7.5, работающий на 64-битной машине Win 7.

Следующее взято из трассировки загрузки сборки:

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  C:\Windows\SysWOW64\inetsrv\w3wp.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = XXXXXX\xxxxxx
LOG: DisplayName = GEMS.Web
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: GEMS.Web | Domain ID: 2
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///c:/inetpub/wwwroot/GEMS.Web/
LOG: Initial PrivatePath = c:\inetpub\wwwroot\GEMS.Web\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: c:\inetpub\wwwroot\GEMS.Web\web.config
LOG: Using host configuration file: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/gems.web/eea5792e/72317e39/GEMS.Web.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/gems.web/eea5792e/72317e39/GEMS.Web/GEMS.Web.DLL.
LOG: Attempting download of new URL file:///c:/inetpub/wwwroot/GEMS.Web/bin/GEMS.Web.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

person Pete    schedule 07.12.2012    source источник


Ответы (2)


Если вы не используете родные библиотеки Win32, вам следует выбрать Any CPU для своих сборок и не связываться с настройкой Включить 32-разрядные приложения в IIS (оставьте значение false).

person Darin Dimitrov    schedule 07.12.2012
comment
Я не уверен, что ты имеешь в виду. Мое приложение должно быть 64-битным, потому что я ссылаюсь на 64-битные сборки. Если я установлю значение Any CPU, то когда я нажму код, который загружает эти 64-битные сборки, они не смогут загрузиться. - person Pete; 07.12.2012
comment
У вас есть контроль над этими собраниями? Если да, то измените их на Any CPU. Если нет, свяжитесь с автором этих сборок и попросите его предоставить вам их версии, не зависящие от разрядности ЦП (любой ЦП). - person Darin Dimitrov; 07.12.2012
comment
Нет, у меня нет контроля над сборками Crystal Reports. Я должен использовать 64-разрядную версию Crystal, потому что если я использую 32-разрядную версию Crystal, я сталкиваюсь с этой проблемой: stackoverflow.com/questions/4208516/ Теперь есть обойти это, используя специальную версию 32-разрядной log4net.dll, доступную в SAP, однако она конфликтует со ссылками на log4net в Castle. Пройдя эту битву раньше, заставить работать 64-битные вещи в прошлый раз было более простым решением. - person Pete; 07.12.2012

Измените свой IIS для обработки 64-битной обработки, используя следующий метод: Инструменты | Опции | Проекты и решения | Веб-проекты | Используйте 64-разрядную версию IIS Express.

person BrianLegg    schedule 15.06.2015