C# 控制台应用程序平台始终为“;现行(x86)“;

C# 控制台应用程序平台始终为“;现行(x86)“;,c#,visual-studio-2010,console-application,platform,C#,Visual Studio 2010,Console Application,Platform,如果我转到C#Console应用程序的项目属性,则其平台始终设置为活动(x86),其中平台目标为x64,如img所示: 有人能告诉你有什么区别,以及如何创建一个应用程序,它的平台是x64,如果你想在x86(32位体系结构)或x64(64位体系结构)上编译/构建项目,这个平台指的是什么。64位应用程序将在64位体系结构上运行,而32位应用程序可以在64/32位体系结构上运行 关于如何创建x64应用程序,您只需在配置管理器中选择x64即可。有关详细说明,请参阅以下documnetMicrosoft

如果我转到
C#Console应用程序的项目属性
,则其
平台
始终设置为
活动(x86)
,其中
平台目标
x64
,如img所示:


有人能告诉你有什么区别,以及如何创建一个应用程序,它的
平台是
x64
,如果你想在x86(32位体系结构)或x64(64位体系结构)上编译/构建项目,这个平台指的是什么。64位应用程序将在64位体系结构上运行,而32位应用程序可以在64/32位体系结构上运行


关于如何创建x64应用程序,您只需在配置管理器中选择x64即可。有关详细说明,请参阅以下documnet

Microsoft在VS2010中犯了两个严重的设计错误,这就是其中之一。托管项目的平台名称始终为“AnyCPU”。这又是2012年第五季度及以后。但是VS2010中的默认名称是“x86”

这是一个可怕的选择,因为平台名称与托管项目完全无关。托管代码运行在任何平台上,它是即时编译器,自动将编译器生成的MSIL转换为机器代码。在运行时,而不是构建时。所以“AnyCPU”是一个更具描述性的名称,抖动确实使它在“任何cpu”上运行

<> P>这种良好思维的暂时性的失误是由C++项目构建模型中的一个重大变化引起的。VS2010是VisualStudio的第一个版本,其中用MSBug构建C和C++项目,而不是以前版本中使用的自定义构建引擎(VCuBug)。对于这样的项目来说,项目选择是非常重要的,它选择用于编译源代码的编译器。不同的CPU需要不同的编译器,因为C++代码直接翻译成机器代码。
所以忽略这一点,名字并不重要。最重要的是,它对抖动的作用没有任何影响。如果要强制它仅生成32位代码,则需要不同的设置。您找到了这样做的设置。

好的,对于这个答案的长度提前表示抱歉,但是您的问题非常巧妙地触及了相当复杂的表面

生成程序集和本机代码

从下到上,Visual Studio/MSBuild不会生成最终在运行代码的计算机上运行的代码。相反,它们生成一个包含MSIL(MicroSoft中间语言)的程序集,该程序集在运行时由CLR转换为该机器的本机代码。对于您经常使用的程序集,计算机还可以通过使用提前缓存本机代码

每个程序集都可以有一个平台目标。正如Hans指出的那样,除了确定本地代码应该是什么味道之外,这实际上并没有什么作用。此指示仅为程序集标头中的几个字节,实际上可以在msbuild之后使用更改。别担心,你不需要使用这个。通常在构建过程中,msbuild/VS将查看每个项目的平台目标,并生成具有正确标题的程序集

程序集的运行时消耗量

让我们考虑一下当你运行你的汇编程序时会发生什么。首先,Windows从其头文件中将其标识为DotNet,并使用CLR作为其主机环境。由于DotNet的版本不同,该环境也会有所不同,例如2.0、4.0、4.5等,以及32位或64位。然后,环境将开始从MSIL程序集生成本机可运行代码并开始执行它

现在,所有应用程序都会调用其他程序集(至少是System/mscorlib)。CLR将尽最大努力确保加载这些文件的正确版本。这可以从其安装位置(例如C:\Windows\Microsoft.Net\Framework…)、GAC(包括NGEN版本)或应用程序当前目录(请参阅)获取。有时此过程会失败,因为例如,它找不到程序集的所需版本(即,当它需要v2.0时,只能找到v1.0),或者当它需要32位时,它找到64位

制作应用程序

回到visualstudio,大多数人都会错过一些东西。它被称为配置管理器,它隐藏在标准工具栏中“解决方案配置”下拉列表的底部。

它基本上为我们提供了一种方法,可以为我们正在构建的所有程序集选择各种风格的属性。例如,这里是一个默认的调试AnyCPU构建

对话框顶部有两个下拉列表,第二个下拉列表用于选择活动平台

但是没有人知道configuration manager

我假设问题是大多数人不知道这个对话框,因此如果他们想创建64位的构建,他们通常会进入每个项目,将AnyCPU构建更改为x64。在过去的10年里,我从未遇到过一个支持64位的代码库,而有人没有这样做过

另外请注意,有一种特殊的配置可能会出现,称为混合平台。它应该处理这样一种解决方案,即既有本机程序集(如C++程序集)也有您的点网络,或者针对多个平台(如电话和桌面)。如果您将32位、64位BUT和任意CPU等混合使用,也可以生成该文件

推荐

相反,我建议您执行以下操作:

  • 进入configuration manager并删除所有未使用的平台配置。理想情况下,将其还原为只针对任何CPU进行调试和发布。使用编辑。。。在下拉列表中,选择并点击删除
  • 通过选择“新建”创建新平台。。。从平台下拉列表中。从任何CPU复制它

  • 现在,有趣的一点,通过