想象一个场景,您有一个复杂的 WinRT 代码框架,您希望从 C++ Metro 应用程序和 C# 桌面应用程序访问它。
有没有办法在非 Metro 应用程序中包含 WinMD?
想象一个场景,您有一个复杂的 WinRT 代码框架,您希望从 C++ Metro 应用程序和 C# 桌面应用程序访问它。
有没有办法在非 Metro 应用程序中包含 WinMD?
更新:这仅适用于 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 类型。