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

本文关键字:构建 32位 64位 | 更新日期: 2023-09-27 18:02:16

我有一个VS2013解决方案与几个项目(c# WPF应用程序加类库)。每个项目的"平台目标"设置为"任意CPU"。我的印象是,最终的EXE将作为64位应用程序在64位PC上运行,并作为32位应用程序在32位PC上运行。这是正确的吗?我的开发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位终端用户安装?

对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?

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


作为最后一个想法,我想补充的是,无论最终的可执行项目是作为Any CPU构建的,还是为特定的32位或64位目标平台构建的,这是非常重要的。

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

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

我们有一个使用32位机器的初级开发人员。他是否仍然能够打开解决方案并在VS中运行它?

是的,他能跑。

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

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

reference 在Visual Studio中构建时有条件地使用32/64位引用

对于最终用户—我的安装程序需要检查操作系统版本并跨适当的DLL进行复制吗?

是的,你需要管理构建过程脚本来为不同的体系结构创建特定的版本。

引用:
Visual Studio "Any CPU"目标的意思吗?