C# 将.net应用程序32位转换为64位

C# 将.net应用程序32位转换为64位,c#,.net,visual-studio,32bit-64bit,C#,.net,Visual Studio,32bit 64bit,我有一个.net应用程序 类库(目标平台设置为任何CPU) Winform应用程序(目标平台设置为任何CPU) 安装程序(目标平台设置为X86,并检测到为.net framework(X86)设置的依赖项) 现在,当我在64位计算机上通过setup.exe安装此应用程序时,它安装在Program Files[x86]文件夹中;我想这就是在64位应用程序上模拟32位环境的WoW64特性 现在,当客户机要求将其转换为64位时,如果32位版本本身在WoW64中运行良好,为什么对他来说很重要?将其转

我有一个.net应用程序

  • 类库(目标平台设置为任何CPU
  • Winform应用程序(目标平台设置为任何CPU)
  • 安装程序(目标平台设置为X86,并检测到为.net framework(X86)设置的依赖项)
现在,当我在64位计算机上通过setup.exe安装此应用程序时,它安装在Program Files[x86]文件夹中;我想这就是在64位应用程序上模拟32位环境的WoW64特性

现在,当客户机要求将其转换为64位时,如果32位版本本身在WoW64中运行良好,为什么对他来说很重要?将其转换为64位会带来性能优势吗

当我尝试将其转换为64位时,是否需要对其进行全部更改,即

  • 类库(将目标平台更改为64)(如果跳过此步骤会怎么样?)
  • Winform应用程序(将目标平台更改为64)(如果我也跳过这个怎么办?)
  • 安装程序(将目标平台更改为64)[检测到的依赖项列表未显示任何.NET framework x64选项,为什么?]

请建议

您可以将.NET代码项目保留在任何CPU上,但是要安装到64位上,而不需要修改您提到的installer项目属性所需的32位WOW内容

如果安装程序中有自定义操作,则当更改为64位时,这些操作可能不起作用。您可能会得到一个
BadImageFormatException
。要解决此问题,您需要修改生成的MSI:

如果您的应用程序是独立的,那么它对客户端没有多大影响。当使用64位时,除了访问更多RAM之外,没有任何免费的性能优势(尽管JIT有不同类型的优化可用)

我见过的唯一需要64位的情况是,当您在另一个应用程序中使用该DLL时,您不能在单个进程中混合使用位

更新:也许缺少64位框架的先决条件是因为您使用的是VS2005


64位可能会也可能不会产生性能差异。64位应用程序也可以使用比32位应用程序多得多的内存

如果在64位操作系统上启动AnyCpu exe,它应该以64位启动(请参见任务管理器中的,32位进程在此处附加了*32)。如果将应用程序设置为x64,则库必须是x64或AnyCpu

如果没有仅限本机x64引用,则可以将exe和dll保留为AnyCpu,但需要将设置修改为x64

至于框架,在x64机器上(这是x64应用程序运行的唯一地方),框架始终包括32位和64位,分别位于C:\Windows\Microsoft.NET\framework和Framework64中

现在,当我在64位计算机上通过setup.exe安装此应用程序时,它安装在 程序文件[x86]文件夹;我想这就是在64位计算机上模拟32位环境的WOW特性- 位应用程序

不,它与程序无关,只与安装程序有关

•安装程序(目标平台设置为X86,检测到的依赖项设置为.net framework(X86))

32位安装程序将其安装在程序的32位文件夹中,无论程序是32位还是64位,都不受限制

遗憾的是,你不能让一个安装程序同时完成这两项工作——你需要一个32位的安装程序和一个64位的安装程序


这完全是MSI部分的设计决定,同样与程序无关。

无需转换,您的应用程序已作为64位进程运行。因为您在EXE项目上使用了AnyCPU。您将其安装到了错误的文件夹中,但如果没有其他进程尝试以编程方式启动您的文件夹,则这并不重要。这是非常罕见的

从TaskMgr.exe的“进程”选项卡中验证这一点。32位进程的进程名后面有*32


通过将安装项目的TargetPlatform设置更改为x64,使您的客户满意,以便将其安装在c:\program文件中。花费您几分钟。

但是为什么我在“检测依赖项”对话框中看不到.NET Framework 2.0(64位)选项?@ackertoLearn如果我面前没有一个包含安装程序的项目,我真的无法回答这个问题-抱歉。创建64位安装程序时,我不应该看到.NET Framework 2.0(x64)的选项吗在“先决条件”对话框中?@EartoLearn我也这么认为,但我不知道.NET Framework 2先决条件是否有点不适用。我使用的是visual studio 2008,但应用程序是基于2.0 Framework构建的,那么.NET Framework依赖性呢?我看不到.NET Framework 2.0(64位)的任何选项在检测到的依赖项对话框中,我的开发机器是32位的,在为64位应用程序创建安装程序时,我在检测到的依赖项对话框中看不到.NET framework 2.0(64位)的该选项。我应该怎么做是的,我看到进程名没有任何*32,即使目标平台是anycpu。但前提条件是.net framework 2.0(x86),但它仍然以64位运行。这是因为您机器上的.net 2.0安装程序只能安装x86版本。请务必选择.NET3.5SP1,因为它会创建一个更小的安装程序。如果需要的话,它可以通过互联网下载.NET。一个64位版本的Windows已经预装了.NET。顺便说一句,所以解除依赖关系也可以。以及没有x64安装程序可用的原因。