У нас есть приложение на C #, которое скомпилировано как AnyCPU. Это приложение использует внешнюю библиотеку (которая также является .Net DLL на AnyCPU), которая загружает некоторые библиотеки C ++ во внешние DLL.
Эти внешние библиотеки предназначены либо для X86, либо для X64. У нас есть событие postbuild, которое копирует событие из X64 в выходную папку.
У нас все работало годами, и у нас есть много модульных тестов, использующих эту библиотеку.
Недавно на одном компьютере (машине сборки) UnitTests теперь дает сбой со следующим стеком вызовов.
The type initializer for 'Dew.Math.Units.MtxParseClass' threw an exception.
at System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(RuntimeType type)
at System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(RuntimeTypeHandle type)
at Dew.Math.TExprContext..cctor()
The type initializer for 'Dew.Math.Units.MtxVec' threw an exception.
at System.Runtime.CompilerServices.RuntimeHelpers._RunClassConstructor(RuntimeType type)
at System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(RuntimeTypeHandle type)
at Dew.Math.Units.MtxParseClass..cctor()
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at Dew.Math.Units.Nmkl.kmp_set_blocktime(Int32 Value)
at Dew.Math.TMtxVecController..ctor()
at Dew.Math.Units.MtxVec.InitializeMtxVec()
at Dew.Math.Units.MtxVec.Dew.Math.MtxVec()
at Dew.Math.Units.MtxVec..cctor()
Мы проверили, что C ++ DLL имеет 64-битный формат, наше приложение находится в AnyCPU на 64-битных компьютерах, поэтому обычно у нас не должно быть этих ошибок.
Странно то, что: мы ничего не трогали ни к этим тестам, ни к тестируемым классам, тесты по-прежнему работают нормально на всех других компьютерах.
Итак, мой вопрос:
Как это отладить:
- Как узнать точный путь к DLL, которая не загружается
- Как быть уверенным, что мы выполняемся в X64, а не в x86?
- Есть ли другие идеи, которые помогут мне решить эту проблему?
Environment.Is64BitProcess == false. Если я выполню их через resharper, у меня будетEnvironment.Is64BitProcess ==true- person J4N   schedule 06.09.2017