我有一个带有几个项目的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位最终用户安装?
我会尝试回答你的一些问题,因为你把这么多的东西捆绑在一起.
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位开发人员将无法在他的机器上运行该项目.
最后,我想补充说,最终的可执行项目是构建为Any CPU,还是针对特定的32位或64位目标平台,这一点非常重要.
通常我发现构建最终的可执行文件Any CPU会在运行时(Bad Image运行时异常种类)导致各种问题,除非所有链接的程序集也是针对性的,Any CPU并且没有外部的本机依赖项.后一项要求是最难确保的.
另一方面,为明确指定的32位或64位平台构建的最终可执行文件可以很好地合并为其构建的其他程序集 Any CPU