2008-08-27 49 views
6

我们正在开发新的开发机器并升级到Vista 64 Ultimate以利用我们的8GB RAM。我们的经理希望我们能够在32位虚拟机上做所有的开发工作,以确保我们的代码在生产中不会出现问题。在32位操作系统上是否使用Vista 64编写代码?

有没有什么办法可以保证结果程序能在32位操作系统上运行? 我不介意使用虚拟机,但我不喜欢他们如何迫使你回到“单一”监视器类型的视图。我喜欢将我的VS工具栏移到另一台显示器上。

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

编辑:使用Harpreet的answer,这些都是我过去常常把我的Visual Studio IDE的步骤编译86位/ 32位:

  1. 单击生成并打开配置管理
  2. 选择活动解决方案平台下拉列表
  3. 选择86,如果它是在列表中,并跳到步骤5,如果不选择<New...>
  4. 在新解决方案平台对话框中,选择86,然后按OK
  5. 验证所有项目的选择的平台是86
  6. 单击关闭。

享受。

谢谢 基思

+0

btw。为您的虚拟机使用VMware Workstation会为您提供多显示器支持。 – 2009-05-16 09:44:23

回答

9

我在64位机器上开发32位Windows。这不是一个问题。你应该确保你的项目设置为x86模式编译才能保守。你会想要通过解决方案中的每个项目并仔细检查。你也可以使用AnyCPU设置,但这样做有点冒险,因为它在你的开发机器上的运行方式与32位机器不同。当然,你想避免64位模式。

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

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

+0

+1用于在目标平台中设置构建和测试环境。如果您正在开发针对特定操作系统或操作系统版本的任何软件,则最好在某处安装该操作系统的副本,以确保其可行!如果可能的话,最好使用这个盒子作为持续集成服务器,这样你的官方版本和官方的单元测试就可以在这个环境下运行。 – 2009-08-16 15:47:45

1

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

我相信你的经理需要更多的教育,真正的意思是:)

4

只要你编译你的可执行文件为32位,它们将在32位和64位Windows机器上运行(保证)。使用64位开发机器的优点是,您可以开始使用64位编译测试代码(检查指针是否转换为32位整数),这样可以使未来更容易转换为64位(您的公司应该选择做一个64位版本)。

1

不是你的问题的答案,但可能是你的问题的一个解决方案:VirtualBox(和其他人)支持“无缝集成”模式,它只是给你第二个启动栏,让你自由地拖动窗口。

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

0

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

MSIL基本上都会让JITer问题特定于平台的指令(在一个很小的性能损失相比,本机映像)

编辑:没有语言,所以我在谈论的.NET Framework语言,如VB .net和C#,C++是一个完全不同的动物。

1

我们开发了一个使用VS 2005(2008年即将推出)的32位应用程序,并且刚刚购买了一些XP Pro x64或Vista Business 64位的新机器,以便我们可以充分利用额外的RAM,如果商业上有必要这么做,可以看一下做64位端口的可能性。除了在我们的开发环境中调整某些脚本之外,我们没有任何问题。

那些未包含在此升级周期中的开发人员仍然使用32位机器,因此这些应该会在单元测试和应用程序测试套件在办理登机手续之前当然会运行。

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

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

0

发现这个今天:

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

64对.NET

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

在x64开发的世界里,我认为我会在这里概述一些难题。这个名单可能会增长,所以期待未来的帖子。

在.NET开发的奇妙世界中,应用程序和程序集可以被编译为针对各种平台。默认情况下,应用程序和程序集编译为Visual Studio中的任何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命令提示符,然后针对要检查的程序集运行它。

相关问题