引用非托管 dll 的单元测试 UWP 应用导致 System.TypeLoadException
Unit Testing UWP app that references unmanaged dll causes System.TypeLoadException
正在尝试对依赖于 .winmd 文件的 UWP 应用程序进行单元测试。
如果单元测试在应用程序中调用一个方法,该方法调用非托管 dll 中的 class,那么我会得到一个 System.TypeLoadException。我试过引用不同的 .winmd 文件并使用 MSTest 框架或 xunit,但总是得到相同的错误。其他单元测试工作正常。
问题可以重现..
- 使用通用 Windows 测试项目创建新解决方案。
- 为 xunit(xunit, xunit.runner.visualstudio) 或 MSTest(MSTest.TestFramework, MSTest.TestAdapter) 添加所需的 nuget 包 - 这两个框架都失败了。
- 添加对非托管 dll 的引用。我使用了 SamplesNative.winmd 可以作为一部分找到
Windows UI 开发实验室的 -
https://github.com/Microsoft/WindowsUIDevLabs.
- 创建调用非托管 dll 的单元测试。使用上面的 SamplesNative 我添加了:
var helper = new DeviceLostHelper();
- 运行 单元测试,它应该失败并显示 - System.TypeLoadException:请求的 Windows 运行 时间类型 'SamplesNative.DeviceLostHelper' 未注册。 ---> System.Runtime.InteropServices.COMException: Class 未注册
任何帮助都会很棒。谢谢
我确定问题与 Resharper 有关。如果我禁用 Resharper 和 运行 使用 MsTest Framework 和在测试资源管理器中的单元测试比测试正常工作。
我通过在 Resharper 选项->工具->单元测试->MsTest 中取消切换启用 MSTest 支持复选框来实现这一点。
正在尝试对依赖于 .winmd 文件的 UWP 应用程序进行单元测试。 如果单元测试在应用程序中调用一个方法,该方法调用非托管 dll 中的 class,那么我会得到一个 System.TypeLoadException。我试过引用不同的 .winmd 文件并使用 MSTest 框架或 xunit,但总是得到相同的错误。其他单元测试工作正常。
问题可以重现..
- 使用通用 Windows 测试项目创建新解决方案。
- 为 xunit(xunit, xunit.runner.visualstudio) 或 MSTest(MSTest.TestFramework, MSTest.TestAdapter) 添加所需的 nuget 包 - 这两个框架都失败了。
- 添加对非托管 dll 的引用。我使用了 SamplesNative.winmd 可以作为一部分找到 Windows UI 开发实验室的 - https://github.com/Microsoft/WindowsUIDevLabs.
- 创建调用非托管 dll 的单元测试。使用上面的 SamplesNative 我添加了:
var helper = new DeviceLostHelper(); - 运行 单元测试,它应该失败并显示 - System.TypeLoadException:请求的 Windows 运行 时间类型 'SamplesNative.DeviceLostHelper' 未注册。 ---> System.Runtime.InteropServices.COMException: Class 未注册
任何帮助都会很棒。谢谢
我确定问题与 Resharper 有关。如果我禁用 Resharper 和 运行 使用 MsTest Framework 和在测试资源管理器中的单元测试比测试正常工作。
我通过在 Resharper 选项->工具->单元测试->MsTest 中取消切换启用 MSTest 支持复选框来实现这一点。