创建64位应用程序

时间:2009-10-19 18:44:56

标签: c# 32-bit 32bit-64bit

如果我有一个用C#编写的32位应用程序,我需要做什么才能将其转换为64位?我假设它更复杂,然后在Visual Studio中将目标机器更改为64位并重新编译。

7 个答案:

答案 0 :(得分:6)

如果你不使用互操作(COM,WinAPI)并且不对指针的大小做出假设,那么它就可以直接切换到另一个平台。即使使用后者,你也可能没问题,除非你使用某些地方做出上述假设的库。

引用有关System.IntPtr的MSDN:

  

IntPtr类型设计为整数,其大小是特定于平台的。也就是说,这种类型的实例预计在32位硬件和操作系统上为32位,在64位硬件和操作系统上为64位。

- 但其他.NET类型设计为具有固定大小,无论平台如何。

答案 1 :(得分:4)

你真的需要它以64位运行吗?或者你只是想让它在64位机器上运行?

对于后者,您可以将C#项目设置为目标Win32,而不是AnyCPU。这意味着当您在64位计算机上运行它时,它将运行WOW(32位“仿真”),这样做的好处是(非托管)JET驱动程序也将运行32位。这应该可以解决你的问题。

答案 2 :(得分:2)

这取决于您的应用程序正在做什么。如果它使用非托管API,P / Invoke和指针算术,很可能在没有一些修改的情况下它不能在64位平台上运行。否则你没关系,你甚至不需要指定一个平台,只需要任何CPU的目标,它应该工作。

答案 3 :(得分:2)

我的同事刚刚遇到他的一个个人项目的问题。事实证明,微软没有为64位编写Jet驱动程序,并且无意这样做。

这很奇怪,因为Office 2010将具有64位版本。

我的建议是将项目属性设置为x86(任何CPU)并将其保留在那里。 Windows 64位可以毫无问题地运行32位应用程序,它是无法运行的16位应用程序。

答案 4 :(得分:1)

this question那样建议怎么样?我以前从未这样做过,我会注意到。

答案 5 :(得分:0)

http://msdn.microsoft.com/en-us/library/ms241064.aspx

其他评论是好点。您还需要了解registry virtualization和Wow64节点的更改。

答案 6 :(得分:0)

  

我假设它更复杂,然后在Visual Studio中将目标机器更改为64位并重新编译。

也许不是。如果您对外部库没有任何依赖关系,那就是您所要做的。更具挑战性的是部署。您不希望将64位二进制文​​件发送给32位用户。所以,更好的是,选择“任何CPU”选项,你的应用程序将自动JIT编译为64位机器上的64位(安装了64位版本的框架)和32位(x86)无处不在其他

但你必须非常确保你没有任何32位依赖项。