4

想象一个场景,您有一个复杂的 WinRT 代码框架,您希望从 C++ Metro 应用程序和 C# 桌面应用程序访问它。

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

4

1 回答 1

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 都在加载相同的程序集,但我强烈怀疑这不会导致任何伤害。

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

于 2012-08-27T05:23:32.663 回答