对于32位或64位的构建感到困惑

时间:2014-05-08 12:49:55

标签: c# visual-studio

我有一个VS2013解决方案,包含多个项目(C#WPF应用程序和类库)。每个项目的“平台目标”都设置为“任何CPU”。我的印象是,最终的EXE将在64位PC上运行为64位应用程序,在32位PC上运行32位应用程序。它是否正确?我的开发PC是64位,但是当我运行应用程序(独立或通过VS调试)时,它在任务管理器中显示为“foo.exe * 32”。这是怎么回事?

我们有一个拥有32位计算机的初级开发人员。他仍然可以打开解决方案并在VS中运行吗?

此外,某些项目引用了第三方DLL。供应商提供32位和64位版本 - 项目应引用哪一个?如果我引用32位DLL将阻止应用程序作为64位应用程序运行?如果我引用64位版本,这会给32位开发人员带来问题吗?那么最终用户呢 - 我的安装程序是否需要检查操作系统版本并复制相应的DLL?

最后,通过NuGet引用的DLL怎么样? NuGet是否安装了32位或64位版本的DLL?如何处理32位或64位最终用户安装?

2 个答案:

答案 0 :(得分:8)

我会尝试回答你的一些问题,因为你已将这么多问题捆绑在一起......

We have a junior developer with a 32-bit machine. Will he still be able to open the solution and run it in VS?

是的,只要所有项目都设置为Any CPU的构建,并且64位程序集或本机DLL没有外部依赖项。

If I reference the 32-bit DLL will this prevent the application from running as a 64-bit application?

是的,如果链接的任何程序集或COM组件是针对32位CLR专门构建的,那么它将要求整个项目作为32位进程运行。您始终必须小心您的项目可能依赖的本机代码。

And if I reference the 64-bit version, will this cause problems for the 32-bit developer?

是的,如果有任何64位程序集,32位开发人员将无法在他的机器上运行该项目。


最后,我想补充说,最终的可执行项目是{@ 1}}还是特定的32位或64位目标平台是非常重要的。

通常我发现将最终可执行文件构建为Any CPU会导致运行时出现各种问题(Bad Image运行时异常种类),除非链接的所有程序集也是Any CPU的目标没有外部的本机依赖。后一项要求是最难确保的。

另一方面,为明确指定的32位或64位平台构建的最终可执行文件可以很好地合并为Any CPU构建的其他程序集

答案 1 :(得分:1)

  

我们有一个拥有32位计算机的初级开发人员。他仍然可以打开解决方案并在VS中运行吗?

是的,他可以跑。

  

如果我引用32位DLL / 64位,这会阻止应用程序作为64位/ 32位应用程序运行吗?

.csproj文件的手动版。您还需要为不同的二进制文件创建单独的目录,理想情况下是彼此的兄弟姐妹,并且与您要定位的平台具有相同的名称。

参考 Conditionally use 32/64 bit reference when building in Visual Studio

  

最终用户怎么样?我的安装程序是否需要检查操作系统版本并复制相应的DLL?

是的,您需要管理构建过程脚本以为不同的架构创建特定版本。

参考文献:
What does the Visual Studio "Any CPU" target mean?

相关问题