我们正在购买新的开发机器并升级到 Vista 64 Ultimate 以利用我们的 8GB 内存。我们的经理希望我们在 32 位虚拟机中进行所有开发,以确保我们的代码在投入生产时不会出现问题。

有什么方法可以保证生成的程序可以在 32 位操作系统上运行吗?我不介意使用虚拟机,但我不喜欢它们迫使您返回“单一”监视器类型视图。我喜欢将 VS 工具栏移到另一台显示器上。

编辑:我们使用 Visual Studio 2005 和 2008、VB.NET 和/或 C#

编辑:使用哈普雷特的 回答, ,这些是我用来设置 Visual Studio IDE 编译 x86 / 32 位的步骤:

  1. 单击构建并打开配置管理器
  2. 选择主动解决方案平台下拉列表
  3. 如果 x86 在列表中,则选择它,如果不在列表中,则跳到步骤 5 选择 <New...>
  4. 在“新建解决方案平台”对话框中,选择 x86 并按“确定”
  5. 验证为所有项目选择的平台是否为 x86
  6. 单击“关闭”。

享受。

谢谢 基思

有帮助吗?

解决方案

我在 32 位 Windows 的 64 位机器上进行开发。这不是一个问题。为了保守起见,您应该确保您的项目设置为在 x86 模式下编译。您需要仔细检查解决方案中的每个项目并仔细检查。您还可以使用 AnyCPU 设置,但这会带来一点风险,因为它在您的开发计算机上的运行方式与 32 位计算机不同。当然,您希望避免使用 64 位模式。

我遇到的问题是,当应用程序编译为 64 位(明确的 64 位或在 64 位 Windows 上编译并运行的 AnyCPU)时,驱动程序无法工作。通过坚持 x86 编译,这些问题是完全可以避免的。这应该会揭示您的开发机器上的所有缺陷。

理想情况下,您可以设置一个可以在 32 位计算机上频繁执行的构建和测试环境。这应该可以让您的管理层放心,并让您避免将虚拟机作为桌面。

其他提示

只要将可执行文件编译为 32 位,它们就可以在 32 位和 64 位 Windows 计算机上运行(保证)。使用 64 开发机器的优点是,您可以开始使用 64 位编译来测试代码(以检查诸如转换为 32 位整数的指针之类的事情),这样将来可以更轻松地过渡到 64 位(如果您的公司选择制作 64 位版本)。

针对 64 位操作系统进行编译是编译器中的一个选项。您绝对可以从 Vista 64 位中编译为 32 位 exe。当您运行应用程序时,您可以在任务管理器中看到进程旁边有一个“*32”...这意味着它是32位的;)

我相信您的经理需要更多了解 64 位操作系统的真正含义:)

不是您问题的答案,但可能是您问题的解决方案:VirtualBox(可能还有其他)支持“无缝集成”模式,它只为您提供第二个启动栏,并让您自由拖动窗口。

另外,这是您问题的答案,这取决于您的编译设置。可以针对不同环境进行编译,使用Visual Studio可以在64位系统上完美编译32位程序。无法告诉您如何操作,但我确信一些 Visual Studio 专家可以帮助您。

我们使用 VS 2005(即将 2008 年)开发一个 32 位应用程序,并且刚刚购买了一些装有 XP Pro x64 或 Vista Business 64 位的新机器,以便我们可以利用额外的 RAM,同时观看有关如果商业上有必要的话,可以进行 64 位移植。除了在开发环境中调整一些脚本等之外,我们在执行此操作时没有遇到任何问题。

那些未包含在此升级周期中的开发人员仍然使用 32 位计算机,因此当单元测试和应用程序测试套件在签入之前正常运行时,这些开发人员应该会遇到问题。

我们还要做的是确保我们拥有一组由“典型”配置(XP/Vista、2/4/8 核等)组成的“测试构建”机器,用于构建和测试签入集- 我们有各种不同的稳定性、性能等测试套件。- 在将它们添加到适当的集成区域之前。同样,这些并没有在运行基于 64 位操作系统构建的 32 位应用程序时出现任何问题。

无论如何,正如其他人已经说过的那样,我不认为这是一个问题,因为无论编译器实际运行的操作系统如何,编译器都会为目标操作系统生成适当的代码。

是的,就像亚当说的那样。有3个选择:MSIL(默认)、x64 和 x86。您可以以 x64 为目标,它将专门为 64 位系统生成 dll,或者您可以以 x86 为目标,它将在 32 位和 64 位上运行,但在 64 位系统上具有与 32 位相同的限制。

MSIL 基本上会让 JITer 发出特定于平台的指令(与本机映像相比,性能略有下降)

编辑:没有语言,所以我谈论的是 .net 框架语言,例如 vb.net 和 c#,c++ 是完全不同的动物。

今天发现这个:

http://www.brianpeek.com/blog/archive/2007/11/13/x64-development-with-net.aspx

使用 .NET 进行 x64 开发

今年早些时候,我切换到了 64 位操作系统 - 确切地说是 Vista Ultimate x64。在大多数情况下,这个过程相对轻松,但一路上出现了一些问题(主要是 x64 兼容驱动程序,但这不是本次讨论的重点)。

在 x64 开发领域,存在一些我认为应该在这里概述的难题。这个列表可能会增加,所以期待未来关于此事的帖子。

在 .NET 开发的奇妙世界中,可以编译应用程序和程序集以针对各种平台。默认情况下,应用程序和程序集在 Visual Studio 中编译为任何 CPU。在这种情况下,CLR 将按照正在执行的计算机的默认目标加载程序集。例如,在 x64 计算机上运行可执行文件时,它将作为 64 位进程运行。

Visual Studio 还提供了 3 个特定的平台目标:x86、x64 和安腾 (IA-64)。当将可执行文件构建为特定目标时,它将作为该类型的进程加载。例如,在 x64 计算机上运行的面向 x86 的可执行文件将使用 32 位 CLR 和 WOW64 层作为 32 位进程运行。当程序集在运行时加载时,只有当它们的目标与宿主进程的目标匹配或者编译为任何 CPU 时,它们才能由进程加载。例如,如果将 x64 设置为程序集的目标,则它只能由 x64 进程加载。

这对我来说在一些场景中发挥了作用:

  • XNA - XNA 仅作为一组 32 位程序集提供。因此,在引用 XNA 程序集时,使用它们的可执行文件/程序集必须针对 x86 平台。如果它的目标为 x64(或任何 CPU 并在 64 位机器上运行),则在尝试加载 XNA 程序集时将引发错误。

  • Microsoft Robotics Studio - XInputGamepadService 在内部使用 XNA 与 Xbox 360 控制器进行通信。往上看。

  • Managed DirectX - 虽然它已被弃用并被 XNA 取代,但它仍然有其用途。这些程序集没有标记为特定目标,但是我在内存异常方面遇到了困难,尤其是 Microsoft.DirectX.AudioVideoPlayback 程序集。

  • Phidg​​ets - 根据您下载的库和时间,它可能会也可能不会仅标记为 32 位。当前版本 (11/8/07) 已标记为此类,因此需要 32 位进程来托管它。确定可执行文件或程序集是否针对特定平台的最简单方法是使用 corflags 应用程序。要使用此功能,请从“开始”菜单打开 Visual Studio 命令提示符,然后针对要检查的程序集运行它。

确定可执行文件或程序集是否针对特定平台的最简单方法是使用 corflags 应用程序。要使用此功能,请从“开始”菜单打开 Visual Studio 命令提示符,然后针对要检查的程序集运行它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top