8

我构建了一个 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 和托管客户端使用?

4

2 回答 2

9

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

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

<Reference Include="component">
  <HintPath>component.winmd</HintPath>
  <IsWinMDFile>true</IsWinMDFile>
  <Implementation>component.dll</Implementation>
</Reference>
于 2014-05-02T18:54:07.620 回答
1

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

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

于 2014-05-02T18:57:53.667 回答