BadImageFormatException, когда тестовая сборка AnyCPU реализует интерфейс из производственной сборки x64

Кажется, я столкнулся со сценарием, когда при запуске 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 работает на 64-разрядной версии Windows 7
  • тестовая сборка построена как AnyCPU чтобы заставить его работать в 64-битном режиме на 64-битном хосте (как описано здесь )
  • , файл testsettings указывает
  • peverify, а corflags не обнаруживает ничего интересного
  • это легко воспроизвести в игрушечном растворе, т. е. где
    • x64Производство
      • не ссылается на другие сборки
      • включает только пустой открытый интерфейс. IExampleInterface
      • имеет , установленный на x64
    • AnyCPUTestingx64Production
      • ссылается только на x64Production.dll (т.е. эта проблема присутствует даже без ссылки на Microsoft.VisualStudio.QualityTools.UnitTestFramework)
      • включает только пустую реализацию x64Production.IExampleInterface
      • имеет для значение x64
  • nunit может загружать и запускать тестовую сборку (после преобразования всех тестовых атрибутов)
    • , но не является хорошим краткосрочным решением более крупной проблемы (которая включает в себя огромное количество файлов проекта)
  • возникает одна и та же проблема, независимо от того, нацелены ли проекты на 3.5 или 4.0.
  • Возникают одни и те же проблемы независимо от того, VS2008 или Используется компилятор VS2010 c #
  • та же проблема возникает, если используется mstest из VS2010 или тестовых агентов
  • , это mstest, который не работает при загрузке 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?

24
задан David 9 February 2012 в 19:29
поделиться