我有一个由CMake自动生成的vcxproj文件构建的64位本机库。CMake构建脚本的一部分会在csharp中自动生成Swig文件。我使用下面标记为Articaft 1的.csproj 构建Swig生成的.cs文件。然后,我有一个C#单元测试项目Artifact 2,下面引用了从Articaft 1生成的.dll 。Articafct 2还会复制由64位本机库生成的dll。
如果我将本机库编译为32位库,那么一切正常,但是如果我在C#单元测试项目中使用64位本机库,则测试将失败并显示以下内容:
C:\Users\mehoggan\Devel\QuadKeys\UnitTestCSharp\TestBingSystem.cs:line 13 Result Message: Test method QuadKeyTests.TestBingSystem.TestCtor threw exception: System.TypeInitializationException: The type initializer for 'QuadKeyNS.SwigQuadKeyPINVOKE' threw an exception. ---> System.TypeInitializationException: The type initializer for 'SWIGExceptionHelper' threw an exception. ---> System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
如何获得C#单元测试以使用库的64位版本?
神器1
Debug AnyCPU f7fe6699-ce1d-443b-b6e9-05eb4e135ac6 Library Properties QuadKeyCSharp QuadKeyCSharp v4.5.2 512 true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4
神器2
Debug AnyCPU {1306B89A-7ED0-4A90-B7A2-6A39ABD9016C} Library Properties UnitTestCSharp UnitTestCSharp v4.5.2 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 10.0 $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages False UnitTest true full false bin\Debug\ DEBUG;TRACE prompt 4 pdbonly true bin\Release\ TRACE prompt 4 ..\Swig\bin\$(Configuration)\QuadKeyCSharp.dll False False False False copy "$(ProjectDir)..\build\QuadKey\$(Configuration)\QuadKey.dll" "$(ProjectDir)bin\$(Configuration)\SwigQuadKey.dll" /Y
Michael Gunt.. 5
您正在将VSTest作为32位进程运行。在Visual Studio的“测试”菜单中,您将找到一个告诉VSTest以32位或64位进程运行的设置。只需将其更改为64位,然后将单元测试程序集保留为AnyCPU。
您正在将VSTest作为32位进程运行。在Visual Studio的“测试”菜单中,您将找到一个告诉VSTest以32位或64位进程运行的设置。只需将其更改为64位,然后将单元测试程序集保留为AnyCPU。