【问题标题】:How do you install a Windows Runtime Component built in C++/CX into a C# project?如何将 C++/CX 内置的 Windows 运行时组件安装到 C# 项目中?
【发布时间】:2015-04-25 17:12:24
【问题描述】:

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

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

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

我在 Windows 8.1 上使用 Visual Studio 2013.4。

【问题讨论】:

  • 没有这样的方法。商店应用程序所需的组件必须始终包含在用户从商店下载的包中。有一个很好的理由,有电话或平板电脑的人没有机会解决 DLL Hell 问题。
  • OP 没有提到不包括组件本身(即 DLL)。他说他想将组件作为库提供给其他人使用,而不必分发源代码和项目文件(这是一个合法的请求)。

标签: c# windows-runtime c++-cx winrt-component


【解决方案1】:

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

【讨论】:

  • 快速浏览一下,它演示了如何在相同风格的测试应用程序中使用 WinRT 组件(即C++ -> C++C# -> C# 等...)。实际上,在 C# 项目中使用 C++ 时必须注意细微差别,我试图在我的回答中解决这些问题。
  • 我想知道 - 您是否尝试创建一个 VSIX(这不是很容易......)并使用它?因为根据我的经验,当您使用正确的标志 (/ZW) 创建 C++/CX 组件时,将其添加到 C# win 应用程序中应该不会有问题。
【解决方案2】:

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

编译 C++/CX 库:

确保为Win32ARMx86x64DebugRelease 的所有排列编译库。

C#使用说明:

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

如需更详细的说明和信息,我强烈推荐访问Mike Taulty's Blog

【讨论】:

  • 我不会投反对票,因为这种方法可行。但是你能想象向客户提供一个库,用于 VS 项目,并指示他添加对你的库的引用(当 UI 建议的唯一选项是 DLL 时强制选择 WINMD 后),卸载项目,以文本形式打开项目文件,并手动添加“实施”标签?我将不得不非常绝望地消耗这样的外部库......
猜你喜欢
  • 2020-06-05
  • 2013-01-18
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多