如何打包Windows运行时组件以进行分发?

时间:2013-07-25 16:49:24

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

我构建了一个WinRT组件(.winmd)供JavaScript和XAML Windows应用商店应用使用。在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和托管客户端使用?

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:1)

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

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