如何在64位环境下运行32位.NET应用程序?

7
我们使用.NET Framework 2.0开发了一款C#应用程序,它可以在32位的计算机上正常运行。但当我在64位环境下运行我的应用程序时,它会崩溃。
我需要让我的应用程序在64位环境下运行。
要如何解决这个问题呢?

2
我们需要比那更多的信息。它是否使用P/Invoke?你将它隔离到代码的特定区域了吗? - Jon Skeet
8个回答

9
你可以将其编译为x86,而不是任何CPU,这样它将针对64位Windows上的32位库运行。或者在64位Windows上安装时将32位库替换为64位库。此外,一些SQLite DLL是特定于32/64位的。

+1 这个简单的解决方案让我不必同时支持 x86 和 x64 构建!希望我能多次点赞!! - Steven de Salas

6

这个方法可以运行,但如果你在构建服务器上进行构建,你应该确保检查x86的构建目标和依赖项。为你的目标环境正确设置项目以进行构建,在长期来看更有意义。 - Ed Greaves

4

如果您想避免重新编译,这里有一个看起来不错的解决方案。但请注意,它需要对每台目标机器进行更改。

如果您有一台64位机器,并且想运行仅适用于32位CLR的.NET应用程序,则必须更改计算机上的.NET框架

通过以下命令设置.NET框架以WOW模式加载CLR

打开命令提示符并输入此命令

C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe SetWow

现在,您应该能够运行仅使用.NET 32位CLR的应用程序。

要恢复默认的64位框架,请运行

C:\ WINDOWS \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Ldr64.exe Set64

(来源)


4
在项目的构建设置中,将平台目标设置为x86而不是任何CPU。这将解决您的项目对32位子系统具有“隐藏”依赖性且在64位上不可用的问题。您的应用程序将在64位Windows上的32位子系统中运行。

2

对于Fredrik Leijon上面的回答,我想这就是你要的。

它将告诉64位和32位的Windows在32位环境下运行您的应用程序。

记得对'Release'配置执行相同的操作。

enter image description here

这将更新您的*.csproj文件供MSBuild检索,如下所示(检查<PlatformTarget/>元素):

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
 <OutputPath>bin\Debug\</OutputPath>
 <ErrorReport>prompt</ErrorReport>
 <WarningLevel>4</WarningLevel>
 <PlatformTarget>x86</PlatformTarget>
</PropertyGroup>

1

我遇到了同样的问题。在我的情况下,只需为我的应用程序的主要程序集(.exe)编译“x86”即可。其他程序集(.dll)使用“任何 CPU”编译。

我们的应用程序现在可以在32位和64位系统上正常工作。


0

这是Windows/ASP.NET应用程序吗?

如果是ASP.NET应用程序,您只能同时运行32位/64位模式。 为此,

情况1。您需要在IIS中的应用程序池上启用Enable32bitApplication。然后重置IIS。

情况2。在regedit中检查相应的DLL。

如果是基于Windows的,则从Visual Studio提示符中运行此命令,

CorFlags.exe TheApp.exe /32BIT+ //Enables 32 bit application.

在IIS中启用apppool的32位就足够了。尝试使用CorFlags很好,直到你发现程序集已签名,然后它就会失败。 - Brain2000

0

除非您引用的库仅适用于32位(Jet DB驱动程序就是一个例子),或者您已经告诉编译器只将应用程序编译为32位,否则它应该可以运行。

崩溃信息显示什么?


1
如果编译器被告知仅编译为32位,则实际上它应该可以工作,并且实际上可能是解决问题的可接受方法。 - harms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接