VS编译.NET 8项目FileVersion显示0.0.0.0,csproj配置正常
问题原因与解决方法
可能的原因
- 版本配置作用域错误:升级助手迁移后,
AssemblyVersion和FileVersion可能被放在了带条件限制的PropertyGroup中(比如仅针对Debug配置或旧框架),导致编译当前使用的配置时无法读取到版本值。 - 编译缓存干扰:项目的
bin/obj文件夹中残留了旧的编译文件,导致新版本配置未生效。 - 重复配置覆盖:
.csproj文件中存在多处AssemblyVersion/FileVersion配置,后续的默认配置(比如0.0.0.0)覆盖了自定义设置。
解决方法
1. 检查并修正.csproj中的版本配置
打开项目的.csproj文件,确保AssemblyVersion和FileVersion处于无条件限制的PropertyGroup中,或至少包含你当前编译使用的Configuration|Platform组合。示例如下:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <!-- 确保版本属性在通用PropertyGroup中 --> <AssemblyVersion>1.0.0.3</AssemblyVersion> <FileVersion>1.0.0.4</FileVersion> <GenerateAssemblyInfo>false</GenerateAssemblyInfo> </PropertyGroup> </Project>
如果版本属性被放在带Condition的PropertyGroup中(比如仅针对Debug配置),切换到Release编译时就会读取不到版本值,需要将其移到通用属性组,或为所有需要的配置分别添加版本设置。
2. 清理并重新编译
- 右键解决方案,选择清理解决方案。
- 手动删除项目目录下的
bin和obj文件夹。 - 重新编译项目后,再检查文件版本和程序标题。
3. 排查重复配置
搜索整个.csproj文件,确认是否存在多份AssemblyVersion或FileVersion配置。如果有,保留需要的版本值,删除其他冲突配置。
4. 验证GenerateAssemblyInfo设置
确认GenerateAssemblyInfo确实设置为false,避免SDK自动生成的AssemblyInfo.cs覆盖自定义版本配置(可再次检查.csproj文件确认)。
内容的提问来源于stack exchange,提问作者Plaje
相关产品推荐
相关产品推荐

