gpt4 book ai didi

c# - C++/C# 解决方案中不可用的任何 CPU

转载 作者:IT老高 更新时间:2023-10-28 22:20:24 26 4
gpt4 key购买 nike

我有一个包含 C# 和托管 C++ 项目的解决方案。它在解决方案平台 x64 和 x86 中编译。由于它是托管 C++,我想创建一个“任何 CPU”解决方案并摆脱旧的解决方案。

我将 C++ 项目链接器设置更改为 Force Safe IL Image for both x64 和 x86。

接下来,我使用配置管理器创建了一个名为“Any CPU”的新解决方案平台。接下来,我添加了一个项目平台,也称为“Any CPU”。

我继续将所有 C# 项目设置为“任何 CPU”,但对于 C++,我不能这样做。项目平台“Any CPU”不在下拉列表中,也没有“New...”选项。

VS 对它很满意,所以我保持原样并开始构建。令我惊讶的是,结果 DLL(来自 C++ 项目)是 MSIL,即使 C++ 的平台是 x64。编译 x32 时也会发生同样的情况,生成的 DLL 在 MSIL 中。

什么给了?为什么我不能将 C++ 项目设置为“任何 CPU”?

最佳答案

据我所知,您不能在 Visual Studio 中为 C++/CLI 项目创建“AnyCPU”项目类型。但是,您可以配置您的 C++/CLI 项目(在“Win32”项目类型下),使其编译为纯粹、安全的 MSIL,无需目标平台。这样做将允许您的 C++/CLI DLL 程序集与“AnyCPU”C# 项目一起使用。 IE。它实际上是“AnyCPU”,尽管这不是它在配置管理器中的实际名称。

在“C/C++”项目设置中:

  • 公共(public)语言运行时支持:安全 MSIL 公共(public)语言运行时支持 (/clr:safe)

在“链接器”项目设置中:

  • CLR 图像类型:只要确保没有明确设置为 IJWPURE

注意事项:

  • 通过使用“安全”项目类型,一些似乎会影响平台类型的编译器和链接器选项将被忽略。 IE。您不必经历并将 everything 设置为非特定平台类型。就如上。但是,如果它让您感觉更好,您可以将其他选项设置为适当的值。 :)
  • “安全”将阻止指针的使用。如果这是一个重要的问题,显然可以通过更复杂的过程来完成。见 Creating a pure MSIL assembly from a C++/CLI project?了解详情。
  • 不要忘记,默认情况下,Visual Studio 将创建 C# 项目,即使它们是“AnyCPU”并且即使它们在 64 位操作系统上执行,也会作为 32 位进程启动。如果依赖项是 x86 而不是预期的纯/安全 MSIL,这可以隐藏平台不匹配问题。请注意(您可以通过取消选中 C# 项目的“构建”项目属性页面中的“首选 32 位”选项来控制这一点)。

关于c# - C++/C# 解决方案中不可用的任何 CPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com