【问题标题】:WP Runtime Component - Type load exception?WP 运行时组件 - 类型加载异常?
【发布时间】:2013-12-17 22:49:26
【问题描述】:

工作原理 > 库设置

我有一个包含 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 项目的根目录中,以引用它、嵌入它……但没有成功。

【问题讨论】:

    标签: c# visual-studio-2012 windows-phone-8 windows-runtime windows-phone


    【解决方案1】:

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

    然后:

    • 在您的项目中添加 .winmd 数据文件作为参考。
    • 检查 .winmd / dll 文件是否在同一文件夹中才能正确加载。

    【讨论】:

      【解决方案2】:

      你需要:

      • 引用添加到您的托管 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 自动完成的;-) 我想没有多少人手动引用本机库,因为关于这一点的文档非常稀疏。我看到提到的解决方案的唯一链接是here...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 2016-05-28
        • 1970-01-01
        • 2020-06-01
        • 1970-01-01
        相关资源
        最近更新 更多