【问题标题】:How to package a Windows Runtime component for distribution?如何打包 Windows 运行时组件以进行分发?
【发布时间】:2013-07-25 16:51:23
【问题描述】:

我构建了一个 WinRT 组件 (.winmd) 供 JavaScript 和 XAML Windows Store 应用程序使用。在 JavaScript 客户端中包含和引用松散的 .winmd 文件输出时,我看到此构建警告:

Microsoft.AppXPackage.Targets(808,9):警告 APPX1707:没有为 .winmd 文件“myRuntimeComponent.winmd”提供实现文件。要在应用清单中生成注册信息,请在项目文件中的 .winmd 引用项上指定“实施”元数据。

我找不到有关此错误或如何包含实现元数据的任何文档。

在运行 JavaScript 客户端时,调用从 .winmd 导出的类方法时会抛出此异常:

0x80040154 - JavaScript 运行时错误:类未注册

请注意,我在客户端应用程序项目中引用松散的 .winmd 文件,而不是引用构建 .winmd 的 Visual Studio 项目。我的用例是分发 .winmd 输出,而不是 .winmd 组件的完整源代码 - 源代码分发不是一种选择。

另请注意,当 Windows 运行时组件被引用为作为项目引用时,JavaScript 客户端会正确构建和运行。 C# XAML 客户端可以通过项目引用或对松散 .winmd 的引用正确运行。

当引用松散的 .winmd 时,似乎在客户端应用程序构建中没有生成某些注册信息。

如何构建和分发松散的 Windows 运行时组件以供 JavaScript 和托管客户端使用?

【问题讨论】:

  • 您也需要组件中的 .dll。组件编译时,必须生成一个.winmd文件和一个.dll文件。
  • 不幸的是,情况并非如此 - 没有生成 dll。输出文件包括 .winmd、.pri 和 .pdb。
  • 嗨,杰西,您找到解决问题的方法了吗?

标签: windows-runtime windows-store-apps winjs winmd


【解决方案1】:

使用 C# 或 VB 构建的 WinRT 组件会生成一个包含元数据和实现的 .winmd。使用 C++ 构建的组件提供单独的 .winmd 和 .dll 文件,而 DLL 包含注册组件的详细信息。

显然,如警告所示,您需要使用以下内容编辑项目文件以指向 DLL:

<Reference Include="component">
  <HintPath>component.winmd</HintPath>
  <IsWinMDFile>true</IsWinMDFile>
  <Implementation>component.dll</Implementation>
</Reference>

【讨论】:

    【解决方案2】:

    或者,您可能想要查看扩展 SDK。有关如何在 VS 中将组件打包为易于使用的 Extension SDK,请参阅以下链接:

    http://msdn.microsoft.com/en-us/library/jj127119.aspx

    【讨论】:

    • 这似乎是打包包含用于多种体系结构的 C++/CX 库的 Windows 运行时组件的唯一解决方案。否则 Visual Studio 将拒绝将 DLL 复制到移动设备、忽略它或无法正确使用它。
    猜你喜欢
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2011-03-15
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    相关资源
    最近更新 更多