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

Eag*_*arn 6 .net c# 32bit-64bit visual-studio

我有一个.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框架x64选项,为什么?]

请建议.

Han*_*ant 7

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

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

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


Ada*_*rth 5

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

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

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

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

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

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

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