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

时间:2012-08-27 05:23:33

标签: .net windows-runtime

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

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

1 个答案:

答案 0 :(得分: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>

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

<Reference Include="{Namespace}">
  <HintPath>{Path to WinMD file}</HintPath>
</Reference>

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

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