gpt4 book ai didi

c# - 对构建 32 位或 64 位感到困惑

转载 作者:可可西里 更新时间:2023-11-01 09:08:55 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我将尝试回答您的一些问题,因为您将如此多的问题捆绑到一个问题中..

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

是的,只要所有项目都设置为针对任何 CPU 构建,并且不存在对 64 位程序集或 native DLL 的外部依赖性。

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

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

如果我引用 64 位版本,这会给 32 位开发人员带来问题吗?

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


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

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

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

构建的其他程序集

关于c# - 对构建 32 位或 64 位感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23542246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com