WP运行时组件-类型加载异常

本文关键字:加载 异常 类型 运行时 组件 WP | 更新日期: 2023-09-27 18:27:40

什么工作>库设置

我有一个Windows Phone 8解决方案与2个项目:

  • "Hello",一个简单的库项目->生成Hello.dll
  • "HelloNativeRT",一个带有C++文件的WP运行时组件->生成HelloNativeRT.dllHelloNativeRT.winmd

在这个解决方案中,"Hello"库引用了WP运行时组件,因此调用类似。。。

HelloNativeRT.SampleNamespace test = new HelloNativeRT.SampleNamespace();

在这个图书馆项目中做得很好。

什么不起作用>WP8应用程序设置

但是,我想在Windows Phone 8应用程序中使用这两个库,但不添加对项目的引用,因为我需要将编译后的库发送给客户端。

  • 我在项目中引用了Hello.dll文件,以及HelloNativeRT.winmd
  • 当我在调试模式下启动应用程序,并转到行HelloNativeRT.SampleNamespace test = new HelloNative...时,它崩溃并显示"TypeLoadException",就像它无法加载本机模块一样

我想我需要以某种方式包含HelloNativeRT.dll文件,因为我猜它包含本机(编译的)代码,因为winmd文件可能只嵌入C++/CX代码。

我应该如何设置我的项目以包含此DLL

我试图把它放在WP8项目的根上,引用它,嵌入它……但没有成功。

WP运行时组件-类型加载异常

在我的案例中,原因很简单:从WinRT组件生成的.winmd文件和.dll文件必须具有相同的名称(例如:testRT.dll和testRT.winmd)。

然后:

  • 在项目中添加.winmd-meta文件作为参考
  • 请检查.winmd.dll文件是否位于要正确加载的同一文件夹中

您需要:

  • 引用添加到托管DLL文件(包装器)
  • 向winmd元数据文件(WinPRT组件)添加引用
  • 将您的本机DLL库文件添加为项目的成员,并选择"内容"answers"始终复制
  • 部分添加到清单文件

WPAppManifest:

<ActivatableClasses>
    <InProcessServer>
        <Path>external_component.dll</Path>
        <ActivatableClass ActivatableClassId="external_component.MyComponent" ThreadingModel="both" />
    </InProcessServer>
</ActivatableClasses>

最后一点是Visual Studio在从WP8项目引用WinPRT项目时自动神奇地完成的;-)我想没有多少人手动引用本机libs,因为关于这一点的文档非常稀疏。我看到上述解决方案的唯一链接是这里。。。