我已经构建了一个WinRT组件(.winmd),供JavaScript和XAML Windows Store应用程序使用。当在JavaScript客户端中包含并引用宽松的.winmd文件输出时,我看到此生成警告:
Microsoft.AppXPackage.Targets(808,9):警告APPX1707:未为.winmd文件'myRuntimeComponent.winmd'提供实现文件。要在应用 list 中生成注册信息,请在项目文件中的.winmd引用项目上指定“实现”元数据。
我找不到有关此错误或如何包含实现元数据的任何文档。
运行JavaScript客户端时,调用从.winmd导出的类方法时,将引发此异常:
0x80040154-JavaScript运行时错误:未注册类
请注意,我是在客户端应用程序项目中引用松散的.winmd文件,而不是引用构建.winmd的Visual Studio项目。我的用例是分发.winmd输出,而不是.winmd组件的完整源-不能选择源分发。
另请注意,将Windows运行时组件作为项目引用引用时,JavaScript客户端会正确构建并运行。 C#XAML客户端可以使用项目引用或对松散的.winmd的引用正常运行。
当引用一个松散的.winmd时,似乎在客户端应用程序构建中未生成某些注册信息。
如何构建和分发宽松的Windows运行时组件以供JavaScript和托管客户端使用?
最佳答案
使用C#或VB构建的WinRT组件会生成一个.winmd,其中包含元数据和实现。用C++构建的组件提供了单独的.winmd和.dll文件,而DLL包含用于注册该组件的详细信息。
显然,如警告所示,您需要使用类似以下的内容来编辑项目文件以指向DLL:
<Reference Include="component">
<HintPath>component.winmd</HintPath>
<IsWinMDFile>true</IsWinMDFile>
<Implementation>component.dll</Implementation>
</Reference>
关于windows-runtime - 如何打包Windows Runtime组件以进行分发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17864054/