在非Metro应用程序中使用自定义Windows运行时组件

Ada*_*son 4 .net windows-runtime

想象一下,您有一个复杂的WinRT代码框架,您希望从C++ Metro Apps和C#Desktop Apps访问这些代码.

有没有办法在非Metro应用程序中包含WinMD?

Ada*_*son 6

更新:这仅适用于Windows 8.Microsoft在Windows 8.1中禁用了此功能.

就在这里.尝试通过引用管理器添加它们时的块似乎是在Visual Studio本身内部实现的.添加后,Visual Studio会将引用的文件视为任何其他WinMD文件.

注意:此解决方案不受MICROSOFT支持!

要将自定义WinMD文件添加到任何非Metro应用程序,必须首先确保您的目标是.NET 4.5.这不适用于任何以前版本的.NET Framework.

一旦定位.NET 4.5,卸载项目文件并打开它进行编辑.然后,<PropertyGroup>在项目文件中的最后一个之后添加以下代码:

  <PropertyGroup>
    <TargetPlatformVersion>8.0</TargetPlatformVersion>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

接下来,找到<ItemGroup>包含引用的内容并添加以下内容:

<Reference Include="{Namespace}">
  <HintPath>{Path to WinMD file}</HintPath>
</Reference>
Run Code Online (Sandbox Code Playgroud)

虽然我无法保证这样做不会产生任何问题,并且鉴于Microsoft已经非常清楚无论您使用CLR的哪个Framework Profile加载相同的程序集,我强烈怀疑这不会导致任何问题.危害.

关于类库的说明.如果将WinMD包含在非Metro类库中,然后在非Metro应用程序中引用该库; 您将无法访问类库中公开的任何自定义WinRT类型,而无需在应用程序中引用WinMD文件或提供包装类型.