对引用非托管 dll 的 UWP 应用进行单元测试会导致系统类型加载异常



尝试对依赖于 .winmd 文件的 UWP 应用进行单元测试。 如果单元测试调用应用程序中的方法,该方法调用非托管 dll 中的类,则我会得到一个 System.TypeLoadException。我尝试引用不同的 .winmd 文件并使用 MSTest 框架或 xunit,但总是收到相同的错误。其他单元测试工作正常。

问题可以重现。.

  • 使用通用 Windows 测试项目创建新解决方案。
  • 为 xunit(xunit
  • , xunit.runner.visualstudio) 或 MSTest(MSTest.TestFramework, MSTest.TestAdapter) 添加所需的 nuget 包 - 任一框架都失败。
  • 添加对非托管 dll 的引用。我使用了SamplesNative.winmd,它可以作为一部分找到 Windows UI Dev Labs - https://github.com/Microsoft/WindowsUIDevLabs。
  • 创建在非托管 dll 上调用的单元测试。使用上面的 SamplesNative,我添加了:
    var helper = new DeviceLostHelper();
  • 运行单元测试,它应该失败,并显示 - System.TypeLoadException:请求的 Windows 运行时类型"SamplesNative.DeviceLostHelper"未注册。 ---> System.Runtime.InteropServices.COMException:类未注册

任何帮助都会很棒。谢谢。

经过进一步的测试和Microsoft的帮助: https://social.msdn.microsoft.com/Forums/vstudio/en-US/68b9ee55-cd7a-4334-952a-a7ecfff4c6ca/unit-testing-uwp-app-that-references-unmanaged-dll-causes-systemtypeloadexception?forum=vsunittest

我已经确定该问题与Resharper有关。如果我禁用锐化器并使用 MsTest 框架和在测试资源管理器中运行单元测试,则测试将正常工作。

我通过在锐化器选项->工具->单元测试->MsTest中取消切换"启用 MSTest 支持"复选框来实现此目的。

最新更新