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

时间:2011-08-16 10:48:51

标签: 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正常工作,为什么对他来说很重要?将其转换为64位会带来性能优势吗?

当我尝试将其转换为64位时,是否需要更改所有内容,即

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

请建议。

4 个答案:

答案 0 :(得分:7)

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

从TaskMgr.exe,进程选项卡中验证这一点。 32位进程在其进程名称后面有* 32。

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

答案 1 :(得分:4)

您可以将.NET代码项目保留在AnyCPU上,但要安装到64位而不需要更改32位WOW,您需要更改您提到的安装程序项目属性。

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

http://adamhouldsworth.blogspot.com/2010/10/64bit-custom-actions.html

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

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

更新:或许缺少64位框架先决条件是因为您使用的是VS 2005?

http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/7b00f4e9-64e3-4fb6-9906-880820ecda92

答案 2 :(得分:3)

  

现在,当我在64位计算机上通过setup.exe安装此应用程序时,它已安装在   Program Files [x86]文件夹;我猜这是在64-上模拟32位环境的WOW功能   位申请。

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

  

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

32位安装程序将其安装在程序的32位文件夹中,无论程序是32位还是64位。

可悲的是,你不能让一个安装程序同时执行这两个操作 - 根据设计,你需要一个32位的安装程序和一个64位的安装程序。

这完全是关于MSI部分的设计决定,而且与该程序完全没有任何关系。

答案 3 :(得分:2)

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

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

如果您没有本机x64-only引用,可以将exe和dll保留为AnyCpu,但是您需要将设置修改为x64。

至于框架,在x64机器上(这是x64应用程序唯一运行的地方),框架总是包含32位和64位,可在C:\ Windows \ Microsoft.NET \ Framework和Framework64中找到分别。