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

3

技术实现 > 库设置

我有一个包含2个项目的Windows Phone 8解决方案:

  • "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项目的根目录中,引用它,嵌入它...但都没有成功。

2个回答

4
我的情况很简单:从WinRT组件生成的.winmd文件和.dll文件必须同名(例如:testRT.dll和testRT.winmd)。
接下来:
  • 将.winmd元数据文件作为引用添加到您的项目中。
  • 检查.winmd / dll文件是否在同一文件夹中以便正确加载。

3
您需要做以下事情:
  • 在您的托管DLL文件(包装器)中添加引用
  • 在您的winmd元数据文件(WinPRT组件)中添加引用
  • 将您的本机DLL库文件作为项目成员添加到您的项目中,并选择构建操作为“内容”和“始终复制”。
  • 向您的清单文件添加部分

WPAppManifest:

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

当您从WP8项目引用WinPRT项目时,最后一个问题将由Visual Studio自动完成;-)我想很少有人手动引用本地库,因为关于这一点的文档非常稀少。唯一一个提到解决方案的链接是这里...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接