【问题标题】:How to work with C++ Windows Runtime Component and AnyCPU target?如何使用 C++ Windows 运行时组件和 AnyCPU 目标?
【发布时间】:2015-01-28 14:38:18
【问题描述】:

我用 VS2013 制作了一个 Windows 运行时组件,使用 C++/CX 并针对通用应用程序。因此,我现在有 5 个 DLL 文件:

  • Windows
    • ARM
      • MyLib.winmd
      • MyLib.dll
    • x86
      • MyLib.winmd
      • MyLib.dll
    • x64
      • MyLib.winmd
      • MyLib.dll
  • Windows 电话
    • ARM
      • MyLib.winmd
      • MyLib.dll
    • x86
      • MyLib.winmd
      • MyLib.dll

我的客户想在 Windows 8.1 项目中使用这个库。他告诉我,他不能将 lib 与针对“AnyCPU”的项目一起使用,这是正常的,因为每个 DLL 都是针对单个平台的。但是,我应该告诉他什么呢?他应该如何创建他的项目以使包在每个平台上都可以运行?

【问题讨论】:

  • 他需要从他的项目中删除 AnyCPU 平台,这不能再工作了。 Build + Configuration Manager,右上角组合,编辑。选择 AnyCPU 并单击删除。
  • 是的,但他如何添加对库的引用?他想为所有架构构建他的应用程序,但如果对 lib 的引用指向其 ARM 版本,x86 构建将不会成功。引用具有多个架构的库的常用方法是什么?
  • .winmd 文件是平台无关的,它只包含类型描述。编译器用来了解如何生成适当的特定于平台的代码以使用类型的元数据。相当于一个 .h 文件,但可由许多不同的编译器使用。就像您的客户正在使用的 C# 编译器一样。你应该只发布一个。

标签: windows windows-store-apps windows-phone-8.1


【解决方案1】:

本机代码不支持 AnyCPU,仅支持纯托管代码。

您需要分发特定于平台的模块,并且您的客户需要针对特定​​架构并为目标架构包含适当版本​​的组件。

一种方法是将组件放在为配置命名的文件夹中,并通过 $configuration 属性选择要引用的版本。

一种简单的设置方法是将组件作为扩展 SDK 分发,它将设置适当的目录结构并包含配置的匹配版本。请参阅 MSDN 上的 Distributing a managed Windows Runtime componentHow to: Create a Software Development Kit(托管文档即使对于本机组件也有很好的概述)。

nuget package 也可以达到同样的效果。

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 2015-04-25
    • 2019-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多