惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
Martin Fowler
Martin Fowler
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
U
Unit 42
阮一峰的网络日志
阮一峰的网络日志
量子位
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
L
LangChain Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园_首页
IT之家
IT之家
V
Visual Studio Blog
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
宝玉的分享
宝玉的分享
Apple Machine Learning Research
Apple Machine Learning Research
I
InfoQ
D
Docker
V
V2EX

博客园 - 冠军

Keep alive 分析 SSRS Reporting Service 日志 [翻译] 感谢 Avalonia, .NET MAUI 即将来到 Linux 和浏览器端 多区域一致性:鱼与熊掌兼得! Microsoft Agent Framework (预览) 入门:让所有的开发者轻松创建 AI Agents 使用 AI app 模板扩展来创建基于订制数据进行聊天的 .NET AI 应用 真正的 .NET 单文件发布与构建 Microsoft.Extensions.AI 库 OfficeRuntime.storage 适配 oidc-client.js 中的 WebStorageStateStore 翻译:基于 OAuth2 在 Web 服务中使用 MailKit Microsoft.Extensions.VectorData.Abstractions 入门 基于本地 Llama 生成 .NET AI 矢量搜索应用 使用 PdfPig 处理 PDF 文档 使用 NATS CLI NATS: 使用 work-queue Stream NATS: Pull Consumers in JetStream .NET 单文件执行程序拆解器 SingleFileExtractor .NET Aspire Apps 集成测试 ASCII 与 Unicode 中的引号
使用 Any CPU构建 .NET 8 应用会支持 32 位吗?
冠军 · 2025-06-24 · via 博客园 - 冠军

https://learn.microsoft.com/en-us/answers/questions/2261688/will-net8-support-32-bit-application-when-built-on

我不能在 32 位的操作系统上运行使用 Any CPU 构建的 .NET 8 应用,但是,如果我显式指定使用 x86 架构进行构建则没有问题。

那么,当使用 Any CPU 构建的 .NET8 应用,还支持 32 位应用吗?

回答

在 .NET8 中,使用 Any CPU 构建确实与在 .NET Framework 中不同

当使用 VS 2022 构建 .NET8 应用的时候,它实际上创建了一个 dll,此 dll 将被框架提供的启动程序所加载。当使用 Any CPU 的时候,默认将使用 64 位的启动程序来加载。因此,导致了这个 .NET8 应用不能在 32 位操作系统上执行。

有一种方式可以让 VS 2022 为 Any CPU 的 .NET8 应用使用 32 位的启动程序,通过NETCore Sdk 的 MSBuild 属性 RuntimeIdentifier 来实现。与 .NET Framework 下的行为不同,它的行为是 Any CPU 的应用将以 32 位的进程运行在 64 位操作系统上。

<PropertyGroup>
  <RuntimeIdentifier>win-x86</RuntimeIdentifier>
</PropertyGroup>

如果你支持 32 位版本的 Windows,我看不到使用 Any CPU 的好处,因为 .NET 8 的启动程序不是平台无关的。

说明

在 .NET 中对所有的 dll 使用了 Any CPU, 所以,如果你使用 dotnet 来执行 dll 程序,它会在所有支持的系统上工作。

但如果你 build 它,那么将使用一个 C/C++ 的二进制程序来托管该 dll,而默认使用的是 64 位的启动器。

注意,与 .NET Framework 不同,它使用操作系统的代码来托管 .NET 的 dll, 而对于不希望使用 dotnet.exe 来托管的场景,将会使用一个 C/C++ 的启动器来托管。

参考资料