如何将以 C++/CX 构建的 Windows 运行时组件安装到 C# 项目中?

How do you install a Windows Runtime Component built in C++/CX into a C# project?

我有一个名为 foo 的库,它是用 C++/CX 编写的。我选择了 Windows 运行时组件,因为我希望将它投射到 C#、C++ 和 JavaScript 中。此外,我希望能够分发该库,并且我不希望 require/allow 消费者在与他们的项目相同的解决方案中加载我的项目以及源文件。

MSDN 上的说明仅演示了如何将 Windows 运行时组件项目包含在使用 C# 项目的解决方案中。我知道有一种方法可以只分发二进制文件,但我不知道怎么做。

这个问题已经被问了一千遍了,但答案总是两个项目在同一个解决方案中,不完整或解决方法。

我在 Windows 8.1.

上使用 Visual Studio 2013.4

我研究并找到了答案...它没有很好地记录,也不直观,但是当您看到 Windows 运行时组件的工作情况时,这一切都是值得的。

编译C++/CX库:

确保为 DebugRelease 的所有排列编译库,在 Win32ARMx86 和 [=15= 中].

C#消费说明:

在解决方案资源管理器中右键单击引用,然后添加对 Microsoft Visual C++ Runtime Package v12.0 的引用。然后添加对您使用项目的适当配置创建的二进制文件的引用(即 Debug/ARM)。这一步很棘手,因为文件过滤器提示您输入 .dll,但您需要将过滤器设置为 *.* 和 select .winmd 文件。然后卸载项目,找到刚刚添加的库的 <Reference> 标签。 <Reference> 下方将有一个 <HintPath> 标签,在 <Reference> 下您还需要添加 <IsWinMDFile>true</IsWinMDFile> 和一个 <Implementation> 标签对,其中加载了.dll.winmd 文件位于同一文件夹中。

有关更详细的说明和信息,我强烈建议访问 Mike Taulty's Blog

一种方法是创建组件的 VSIX 包。请参阅 Walkthrough: Creating an SDK using C++,其中确切显示了如何使用 C# 项目使用的 WinRT 组件执行此操作。