C#开发中可能存在的64位操作系统问题

Cus*_*dio 3 c# 64-bit visual-studio-2008 windows-7

我正在将我的操作系统更新到Windows 7 x64,我只有运行32位操作系统的经验.有没有人在64位环境下有任何糟糕/良好的体验?

作为参考,我使用的工具是:

Han*_*ant 21

在64位操作系统上运行会产生许多副作用,这些副作用在某种程度上是显而易见的.最常见的问题:

  • 在Visual Studio中编辑并继续将无法正常工作.您可以通过强制.NET应用程序以32位模式运行来解决此问题.Project + Properties,Build选项卡,Platform Target = x86.在VS2013中得到了解决.

  • 如果您在.NET应用程序中使用任何ActiveX控件或COM组件,您可能会发现您的程序不再有效,因为您的计算机没有相应的64位版本的COM服务器.您将收到错误0x80040154,REGDB_E_CLASSNOTREG,"未注册的类".与上面相同的修复.

  • 64位调试器不支持混合模式调试,您必须提交"仅托管"或"仅本机"调试.与上面相同的修复,只要您没有64位特定问题.在VS2010中得到了解决.

  • 在需要IntPtr时声明uint或int的写得不好的P/Invoke声明将停止在64位模式下工作.您通常会收到AccessViolation异常或失败返回代码.或PInvokeStackImbalance MDA警告.找到错误不应该有任何问题,只需修复声明即可.

  • 64位版本中没有几个传统的寿命终止Microsoft库.这通常是Microsoft Access数据库的问题.与上面相同的修复.

  • 您必须使用正确版本的Regasm.exe来注册[ComVisible]程序集.从Framework或Framework64中选择一个,具体取决于客户端程序是以64位还是32位模式运行.或者两者都希望服务器可用.

  • 一些COM类型库在其方法声明中包含依赖于位的参数.ADO 2.8是值得注意的.一定要使用正确的Tlbimp.exe位来生成正确的COM互操作程序集,Visual Studio将不会这样做.与Regasm.exe相同的方法

  • 32位程序具有与64位程序不同的注册表视图.特别是HKCR和HKLM\Software荨麻疹是虚拟化的.在Regedit.exe中,可以在HKLM\Software\Wow6432Node键下看到32位可见键.这可能会导致使用注册表的程序出现许多细微问题..NET 4 RegistryKey.OpenBaseKey()允许指定所需的视图.

  • 对于COM,您将使用Regsvr32.exe的正确位数来注册非托管COM服务器(不是.NET服务器,它们使用Regasm.exe).对于64位服务器,请使用c:\​​ windows\system32中的一个,对于32位服务器,请使用c:\​​ windows\syswow64.

  • 文件系统中的文件夹是虚拟化的,特别是c:\ windows\system32和c:\ program files.32位程序将显示c:\ windows\syswow64和c:\ program files(x86).

  • 安装人员需要考虑上述所有问题.