团队正在从XP32转向XP64进行.NET开发 - 任何陷阱?

时间:2009-02-11 00:30:45

标签: .net visual-studio windows-xp 64-bit

我的团队正在使用新的XP64工作站。到目前为止我们一直在使用XP32。我们的大多数工作都是在托管的C#/ VS2008 / .net 3.5和SQL Server 2005中完成的。但是我们确实有一些应用仍在VS2005 / .net 2.0中。我们的大多数应用程序是ASP.NET webforms应用程序和在生产中的64位服务器上运行的WCF服务。但是,我们正在进行一些必须在32位计算机上运行的WPF开发。

我们应该注意到任何陷阱或过渡的痛苦吗?

12 个答案:

答案 0 :(得分:7)

如果要引用任何为32位编译的第三方DLL,则必须将应用程序作为32位目标。这可以通过更改项目设置或使用带有/ 32BIT +参数的corflags应用程序来完成。

我在XP x64作为开发工作站的几个月中遇到的唯一“问题”是编辑并继续在64位应用程序中的Visual Studio调试器中不起作用。

答案 1 :(得分:3)

取决于。

您是否在代码中使用了P / Invoke?

您是否使用过非托管代码和编组数据?如果是这样,那么你将不得不用细齿梳子来完成这个代码:(。

但是,如果您的代码是纯C#,它没有使用P / Invoke,那么您应该看到的唯一区别是性能略有提升和内存性能提升:)。

然而,您可能会遇到gremlins,为您的开发机器找到驱动程序。

如果您有一些32位代码,那么也许您可以创建一个WCF接口(命名管道非常非常快)并使用它来与32位服务进行通信。我知道你不能在64位进程中使用32位代码,但我认为你可以打开一个32位进程的管道,除非我有错误。在这种情况下,您总是可以使用TCP / IP。可能会使您免于重写系统中的关键代码,并允许您使用WOW64或VM来处理迁移问题。

答案 2 :(得分:3)

希望这有帮助

Registering COM 32 bit DLL for asp 64 bit call

Many links about convention 32-64 bits

General FAQs About 64-bit Windows

64-bit System Design

请参阅此提示Biggest performance improvement you’ve had with the smallest change?

更多精彩博客提示:Back to Basics: 32-bit and 64-bit confusion around x86 and x64 and the .NET Framework and CLR

Windows Application Quality Cookbook from Microsoft

DevReadiness.org
该站点致力于帮助Windows ISV生态系统为该平台的新版本开发高质量的应用程序。 Windows 7最近在PDC 2008大会上宣布,右侧提供了新应用程序准备“cookbook”的链接

Microsoft.com OPS人员在博客中介绍了他们向x64的迁移及其运作方式。
Running Microsoft.com on 64 Bit…The Dependencies, The Goodness, the Gotcha’s

答案 3 :(得分:3)

您将无法与.NET x64中的MS Access数据库通信,因为没有x64 Jet驱动程序。

我认为这是迁移到x64的一个很好的理由。

答案 4 :(得分:2)

我去年使用了XP 64位几个月。我的经验是,Microsoft开发堆栈安装和运行没有任何问题,包括64位版本的SQL Server。

我遇到了我的华硕主板板载Marvell Yukon网卡的网络驱动程序问题。 64位驱动程序存在严重问题,这些问题并不是很明显,但经过几个月的激烈测试后变得明显。千兆网络上的网络传输速率不如预期,当两个进程访问相同的网络资源时,Windows将崩溃。

我建议,就像其他海报建议的那样,在切换整个团队之前测试硬件 - 软件设置。这更有可能出现问题。

答案 5 :(得分:2)

我已经在64位平台上开发了一段时间。这是一个小小的提示,可以让你头疼。

如果你得到例外

  

“BadImageFormatException”(例如“可以   不装载或装配   'Microsoft.TeamFoundation等等或   其中一个依赖项。一次尝试   是用来加载程序的   格式不正确“)

应用程序很有可能找不到64位版本的程序集。

使用OLEDB / Jet驱动程序访问数据库时,我们经常遇到此错误。我也经历过与TFS集成的工具。

要解决此问题,请转到项目设置“高级编译选项”下的“编译”选项卡,然后选择“x86”作为目标CPU。

希望这有帮助!

答案 6 :(得分:1)

  • 混合模式调试是一个问题 您可以在64位应用程序中使用任何C ++和C#。
  • 仍有许多开发工具不支持在Windows x64上运行,或者不支持使用64位二进制文​​件。以Compuware DevPartner为例。它目前仅支持32位应用程序开发,但应用程序本身将在64位Windows上运行。

答案 7 :(得分:1)

TFS不支持64位(TFS服务器,对团队资源管理器不确定)

答案 8 :(得分:1)

你可能会遇到string.GetHashCode()的问题,在32位和64位机器上为同一个字符串返回一个不同的值,因为它们将运行不同版本的CLR。

重要的是:

  

“GetHashCode的行为取决于其实现,该实现可能会从公共语言运行库的一个版本更改为另一个版本。可能发生这种情况的原因是为了提高GetHashCode的性能。“

更多信息herehere

答案 9 :(得分:1)

现在将有两组 ODBC数据源(DSN):32位和64位。某些数据库目前没有更新的64位驱动程序,因此您将被迫使用32位驱动程序,或者您可以等待。

答案 10 :(得分:1)

我们遇到了两种不同类型的问题:

  1. 我们有一个第三方组件,它包含了一个原生的32位dll。供应商没有提供64位版本,因此我们不得不针对32位开发。

  2. 一些驱动程序问题。当我们尝试的时候,XP-64并没有完全消失(现在有吗?)。问题与开发无关,但我们在打印机驱动程序,网络驱动程序等方面遇到了一些麻烦。在vista中,他们更改了驱动程序模型,因此现在可能会有更多的64位驱动程序,但我不知道它们是否会向后兼容XP。

答案 11 :(得分:0)

Sun有一篇很好的文章。 http://developers.sun.com/solaris/articles/ILP32toLP64Issues.html

  

目前的32位并不罕见   应用程序假设int   类型,长类型和指针是   相同的大小。因为长的大小   和指针在LP64数据中的变化   模特,这个变化本身就是   ILP32到LP64的主要原因   转换问题。