6

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

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

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

编辑:使用 Harpreet 的回答,这些是我用来设置我的 Visual Studio IDE 以编译 x86 / 32bit 的步骤:

  1. 单击构建并打开配置管理器
  2. 选择 Active Solution Platform 下拉列表
  3. 如果它在列表中,则选择 x86,如果不在,则跳至步骤 5 选择<New...>
  4. 在 New Solution Platform 对话框中,选择 x86 并按 OK
  5. 验证为所有项目选择的平台是 x86
  6. 单击关闭。

享受。

谢谢你,基思

4

7 回答 7

9

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

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

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

于 2008-08-27T17:02:45.580 回答
4

只要您将可执行文件编译为 32 位,它们就可以在 32 位和 64 位 Windows 机器上运行(保证)。使用 64 台开发机器的优势在于,您可以开始使用 64 位编译测试您的代码(以检查诸如转换为 32 位整数的指针之类的东西),这样可以在将来更容易过渡到 64 位(如果您的公司选择做一个64位版本)。

于 2008-08-27T16:08:06.990 回答
1

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

我相信您的经理需要更多关于 64 位操作系统的真正含义的教育 :)

于 2008-08-27T16:06:54.670 回答
1

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

另外,这是对您问题的回答,这取决于您的编译设置。可以针对不同的环境进行编译,用Visual Studio可以在64位系统上完美编译32位程序。不能告诉你怎么做,但我相信一些 Visual Studio 大师可以帮助你。

于 2008-08-27T16:09:40.763 回答
1

我们使用 VS 2005(即将推出 2008 年)开发了一个 32 位应用程序,并且刚刚购买了一些装有 XP Pro x64 或 Vista Business 64 位的新机器,以便我们可以利用额外的 RAM,同时对如果商业上需要这样做,则可以进行 64 位端口。除了在我们的开发环境中调整一些脚本等之外,我们没有遇到任何问题。

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

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

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

于 2008-08-27T17:24:43.797 回答
0

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

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

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

于 2008-08-27T16:14:44.977 回答
0

今天发现了这个:

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 中编译为 Any CPU。在这种情况下,CLR 会将程序集加载为正在执行它的机器的默认目标。例如,在 x64 机器上运行可执行文件时,它将作为 64 位进程运行。

Visual Studio 还提供 3 个特定平台目标:x86、x64 和 Itanium (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 控制器通信。往上看。

  • 托管 DirectX - 虽然这已经被弃用并被 XNA 取代,但它仍然有它的用途。这些程序集没有针对特定目标标记,但是我遇到了内存异常问题,尤其是 Microsoft.DirectX.AudioVideoPlayback 程序集。

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

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

于 2008-11-07T17:44:36.283 回答