5

正如标题所示,我正在 64 位机器上使用 VS 2012 编译 C# 应用程序。我希望正在构建的程序可以在 32 位机器上运行。

现在我在网上找到的唯一帮助是:菜单>构建>配置>活动解决方案平台默认为任何CPU,我试过了,但在32位机器上不起作用(除非我做错了什么)

尝试在 x86 平台的调试配置中添加一个新配置,并检查构建

在 32 位机器上编译并运行应用程序,出现错误 A.exe 不是有效的 Win32 应用程序。

我的上述内容与此处所做的类似:Link to Stack Overflow Similar Question

更新 1: 目标操作系统是 WinXP SP3,但我们不相信它上面有 .NET 4.5。我将测试以查看在 .NET 4.0 中编译应用程序的早期版本是否可以解决问题并解决问题。问题可能不是错误消息显示的内容。

4

5 回答 5

6

将您的项目设置为目标AnyCPU应该允许它在 32 位机器上运行,前提是您没有使用加载 64 位本机代码的库。如果您有任何依赖项,您还需要确保使用AnyCPU这些依赖项的 32 位版本。此外,请确保您在 32 位计算机上安装了正确的 .NET Framework(如果您在新项目中使用 VS 2012,则默认为 .NET 4.5)。

请注意,新项目在 VS 2012 中的默认值为 AnyCPU,Prefer 32 Bit选中该选项。这将导致它始终作为 32 位应用程序运行,即使在您的 64 位操作系统上也是如此。


请注意,由于您的朋友运行的是 XP sp3,因此您不能使用 .NET 4.5。Windows XP 不支持 .NET 4.5。您需要将您的应用程序更改为以 .NET 4.0 为目标,然后它将在 XP 机器上运行(如果他安装了 4.0 框架)。

于 2013-01-31T19:10:18.383 回答
3

该错误是 Win32 错误ERROR_BAD_EXE_FORMAT。它由加载程序生成,当您尝试在 32 位操作系统上运行 64 位进程时会发生这种情况。还有其他方法可以查看该错误,但这是迄今为止在 .exe 文件上发生该错误的最常见原因。

要编译 32 位进程,您需要在项目配置中以 x86 为目标。另一种选择是针对 AnyCPU。这将导致在 32 位操作系统上执行时是 32 位进程,而在 64 位操作系统上执行时会导致 64 位进程。您的构建目标似乎是 x64。

于 2013-01-31T19:10:07.680 回答
1

平台名称(显示在属性顶部,“构建”页面)只是一个名称。配置编辑器中的“Active Solution Platform”也是如此。这有点令人困惑。

您必须确保“目标平台”设置确实设置为“AnyCPU”或“x86”。

于 2013-01-31T19:30:37.300 回答
1

我有同样的问题。我与之斗争。并且我找到了解决方案。解决方案是:

首先选择平台目标“ x86 ”。之后将您的项目构建为“发布模式”而不是“调试模式”。最后,您可以在任何平台(32 位或 64 位)上运行。

于 2013-03-07T07:50:40.643 回答
0

如果上面提供的解决方案都没有帮助您,请尝试以下操作: 打开项目属性并单击左侧栏中的常规。将平台工具集更改为其中包含 Windows XP 的工具集。

例如,在 Visual Studio 2015 中,它将默认设置为“Visual Studio 2015 (v140)”。为了能够在 Windows XP 上运行,您必须将其更改为“Visual Studio 2015 - Windows XP (v140_xp)”。

现在进行完全重建,exe 应该可以在 Windows XP 上运行。

于 2015-08-17T13:39:15.707 回答