Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to package a Windows Runtime component for distribution?

I have built a WinRT component (.winmd) for use by both JavaScript and XAML Windows Store apps. When including and referencing the loose .winmd file output in a JavaScript client, I see this build warning:

Microsoft.AppXPackage.Targets(808,9): warning APPX1707: No implementation file was provided for the .winmd file 'myRuntimeComponent.winmd'. To generate registration information in the app manifest, specify the 'Implementation' metadata on the .winmd reference item in the project file.

I can't find any documentation on this error or how to include implementation metadata.

When running the JavaScript client, this exception is thrown when a class method exported from the .winmd is called:

0x80040154 - JavaScript runtime error: Class not registered

Note that I am referencing the loose .winmd file in the client application project, rather than referencing the Visual Studio project that builds the .winmd. My use case is distributing the .winmd output, not the full source for the .winmd component - source distribution is not an option.

Also note that when the Windows Runtime component is referenced as a project reference, the JavaScript client builds and runs correctly. The C# XAML client runs correctly with either a project reference or a reference to the loose .winmd.

It seems as if some registration information is not being generated in the client application build when a loose .winmd is referenced.

How can I build and distribute a loose Windows Runtime component for use by both JavaScript and managed clients?

like image 900
Jesse Johnston Avatar asked Jul 25 '13 16:07

Jesse Johnston


People also ask

What is Windows Runtime library?

The Windows Runtime C++ Template Library (WRL) is a template library that provides a low-level way to author and use Windows Runtime components. Note. WRL is now superseded by C++/WinRT, a standard C++17 language projection for Windows Runtime APIs. C++/WinRT is available in the Windows SDK from version 1803 (10.0.

What is WinRT used for?

C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API.

What is a runtime component?

A Windows Runtime component is a self-contained software module that you can author, reference, and use with any Windows Runtime language (including C#, C++/WinRT, Visual Basic, JavaScript, and C++/CX).

What are Microsoft Runtimes?

The Microsoft 365 Access Runtime enables you to distribute Access 365 applications to users who don't have Microsoft Office installed on their computers or a version of Microsoft Office that doesn't include Access.


1 Answers

A WinRT component built with C# or VB produces a .winmd that contains both metadata and implementation. A component built with C++ provides separate .winmd and .dll files, and the DLL is what contains the details to register the component.

Apparently, as the warning indicates, you need to edit the project file with something like the following to point to the DLL:

<Reference Include="component">
  <HintPath>component.winmd</HintPath>
  <IsWinMDFile>true</IsWinMDFile>
  <Implementation>component.dll</Implementation>
</Reference>
like image 58
Kraig Brockschmidt - MSFT Avatar answered Sep 27 '22 19:09

Kraig Brockschmidt - MSFT