繁体   English   中英

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

[英]converting .net application 32 bit to 64 bit

我有一个 .net 应用程序,

  • Class 库(目标平台设置为任何 CPU
  • Winform 应用程序(目标平台设置为任何 CPU
  • 安装程序(目标平台设置为X86和检测到的依赖项设置为 .net 框架(x86))

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

现在,当客户要求将其转换为 64 位时,如果 32 位版本本身可以通过 WoW64 正常工作,为什么对他来说很重要? 将其转换为 64 位会带来性能优势吗?

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

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

请建议。

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

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

通过将安装项目的 TargetPlatform 设置更改为 x64 来让您的客户满意,这样它就会安装在 c:\program 文件中。 带你几分钟。

您可以将 .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

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

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

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

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

遗憾的是,您不能让一个安装程序同时执行这两种操作 - 您需要一个 32 位安装程序和一个 64 位安装程序,从设计上来说。

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

64 位可能会或可能不会产生性能差异。 与 32 位应用程序相比,64 位应用程序还可以使用(方式)更多的 memory。

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

如果您没有纯 x64 的原生引用,您可以将您的 exe 和 dll 保留为 AnyCpu,但您需要将设置修改为 x64。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM