1

我已经制作了一个控制台应用程序,C#使用MonoDevelop编译并在我的系统中Mono 3.2.1配置。AnyCPUUbuntu

当我将此应用程序放入某个Windows 7 64bit系统并运行它时,在任务管理器列表中它会*32按进程名称显示一个后缀。这是否意味着它作为 32 位程序运行?我应该怎么做才能运行这个应用程序64bit

[更新]

作为评论中的一点,让我澄清一下,在Windows 7机器上我使用的是微软的 .Net 库而不是 Mono 的。

[更新]

我在互联网上搜索了一下,发现了以下命令,它输出了有关 Linux 中可执行文件的内容:

:~$ file /bin/bash 
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xe643cefb2c672ad94e955067c511537ddbab48da, stripped

因此,我在使用and.exe编译的文件上对其进行了测试:AnyCPUMonoMonoDevelop

:~$ file /ConsoleTest/bin/Release/ConsoleTest.exe
/ConsoleTest/bin/Release/ConsoleTest.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows

阅读维基百科页面PE 代表 32 位程序,而 PE+ 代表 64 位程序。

进一步进行测试,我使用 MS Visual Studio 以三种模式( 和 )编译了一个简单的AnyCPU控制台x86程序x64。编译完成后,我将它们三个都放入了我的 Ubuntu 机器并file在它们上尝试了命令。结果如下:

:~$ file /ConsoleTest-AnyCPU.exe 
/ConsoleTest-AnyCPU.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows

:~$ file /ConsoleTest-x86.exe 
/ConsoleTest-x86.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows

:~$ file /ConsoleTest-x64.exe 
/ConsoleTest-x64.exe: PE32+ executable (console) x86-64 Mono/.Net assembly, for MS Windows

如您所见,只有x64一个标记为PE+!然后我尝试在 Ubuntu 和 Windows 中运行它们。

在 Ubuntu 中,它们三个都运行!但不幸的是,我无法说它们是在 32 位模式还是 64 位模式下运行!

在 Windows 中,虽然它们三个都运行(当然它们运行),但讨厌的*32后缀仅在x86编译模式下显示在进程名称中。缺少*32表示 和 的其他两种模式AnyCPUx64在 64 位运行的。

所以我的问题仍然存在:作为 Windows 中的 64 位进程,我应该怎么做才能在 Ubuntu中运行已AnyCPU编译的程序?MonoMonoDevelop

4

0 回答 0