Кажется, я столкнулся с сценарием, когда при запуске mstest на сборке AnyCPU, которая ссылается на сборку x64, я получаю исключение BadImageFormatException.
Проблема возникает, когда интерфейс в x64Production.dll реализован (даже если он не используется) с помощью тестовой сборки AnyCPUTestingx64Production.dll:
Unable to load the test container 'D:\AnyCPUTestingx64Production.dll'
or one of its dependencies. error details:
System.BadImageFormatException:
Could not load file or assembly 'x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.
- mstest работает в Windows 7 64-разрядный
- тестовая сборка построена как AnyCPU, чтобы заставить ее работать на 64-битной основе на 64-битном хосте (как описано здесь)
- файл настроек тестов указывает < Исполнение hostProcessPlatform = "MSIL" / >
- peverify и corflags не показывают ничего интересного
- это легко воспроизводится в игрушечном решении, т.е. где
- x64Production
- ссылки отсутствуют другие сборки
- включает только пустой открытый интерфейс IExampleInterface
- имеет <PlatformTarget> установлен на x64
- AnyCPUTestingx64Production
- ссылается только на x64Production.dll(т.е. эта проблема присутствует даже без ссылки на Microsoft.VisualStudio.QualityTools.UnitTestFramework)
- включает только пустую реализацию x64Production.IExampleInterface
- имеет <PlatformTarget> установлен на x64
- x64Production
- nunit может загружать и запускать тестовую сборку (как только я преобразую все тестовые атрибуты)
- но не является хорошим краткосрочным решением более крупной проблемы (которая включает огромное количество файлов проекта).
- возникает одна и та же проблема: ориентированы ли проекты на 3.5 или 4.0
- возникают те же проблемы, если используется компилятор VS2008 или VS2010 С#
- возникает одна и та же проблема: используется ли mstest из VS2010 или тестовых агентов.
- Ошибка при загрузке AnyCPUTestingx64Production - это не проблема с попыткой загрузить сборку в неправильном QTAgent (ничего не отображается в Process Monitor и переименование QTAgent32.exe не имеет никакого эффекта):
*** Assembly Binder Log Entry (09/02/2012 @ 09:44:26) ***
The operation failed.
Bind result: hr = 0x8007000b. An attempt was made to load a program with an incorrect format.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: User = David
LOG: DisplayName = x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///D:/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = MSTest.exe
Calling assembly : AnyCPUTestingx64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe.Config
LOG: Using host configuration file:
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:///D:/x64Production.DLL.
LOG: Assembly download was successful. Attempting setup of file: D:\x64Production.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: x64Production, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.
Кто-нибудь еще выяснил, является ли это просто неподдерживаемым в VS2010 mestest?