.NET 6中ASP.NET Core发布后DLL与EXE产品版本不一致原因咨询
ASP.NET Core项目发布后EXE与DLL版本不一致的原因
同一项目发布后出现EXE和DLL版本不同,核心原因集中在以下几点:
EXE是.NET Runtime的启动宿主,而非业务代码载体
ASP.NET Core项目(控制台/桌面类型)发布生成的EXE,本质是.NET Runtime的启动宿主程序,它的版本与你使用的.NET SDK/Runtime版本绑定,和你在csproj中设置的项目版本无关。而同名DLL才是编译业务代码生成的程序集,版本完全遵循你在csproj里配置的Version、AssemblyVersion等属性。版本属性配置不完整或被覆盖
默认情况下,csproj中的Version属性会同时作为程序集的AssemblyVersion和FileVersion。但如果项目或解决方案中存在Directory.Build.props/Directory.Build.targets,或者在csproj中单独设置了FileVersion、AssemblyVersion属性,可能导致DLL和EXE的版本取值逻辑不一致——比如EXE的文件版本被SDK默认规则覆盖,而DLL使用你自定义的版本。发布模式的差异影响
- 采用自包含发布(
dotnet publish -r <rid> --self-contained true)时,生成的EXE会包含.NET Runtime的部分代码,其版本直接对应你使用的Runtime版本; - 采用框架依赖发布时,EXE是轻量级启动器,版本同样由SDK决定,和项目版本无关。
- 采用自包含发布(
MSBuild编译目标的差异化处理
ASP.NET Core SDK在编译和发布阶段,对EXE和DLL的版本设置有不同的MSBuild目标逻辑:EXE的版本由SDK自动注入Runtime相关版本信息,而DLL则严格使用项目中配置的版本属性。
内容的提问来源于stack exchange,提问作者pantonis
相关产品推荐
相关产品推荐

