You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Visual Studio项目升级至.NET 8后版本号未按配置生效问题

.NET 8项目版本配置不生效问题解决

问题背景

从.NET 6升级到.NET 8后,项目自动移除了AssemblyInfo.cs,按照.NET SDK项目的版本管理逻辑,在.csproj中配置了ApplicationRevisionApplicationVersionAssemblyInformationalVersion属性,但代码中调用Application.ProductVersion或通过反射获取AssemblyInformationalVersion时,始终返回默认的1.0.0;查看构建后obj目录自动生成的Project.AssemblyInfo.cs,所有版本属性也都是1.0.0.01.0.0

问题原因

  1. ApplicationVersion是ClickOnce专属属性:该属性仅用于ClickOnce部署的项目,普通WinForms/WPF等桌面应用不会用它来设置程序集版本,配置了也不会生效。
  2. 缺少核心版本属性配置:.NET SDK项目中,控制程序集版本的核心属性是AssemblyVersion(程序集版本)和AssemblyFileVersion(文件版本),你的.csproj中未配置这两个属性,SDK会默认生成1.0.0版本。
  3. AssemblyInformationalVersion未正确关联:如果未显式配置Version属性,AssemblyInformationalVersion会默认继承Version的默认值1.0.0

解决步骤

1. 修改.csproj配置,添加正确的版本属性

将以下配置添加到.csproj<PropertyGroup>节点中,替换原有无效的版本配置:

<!-- 程序集版本:用于程序集识别和强命名,支持通配符自动递增修订号(如0.4.2.*) -->
<AssemblyVersion>0.4.2.0</AssemblyVersion>
<!-- 文件版本:显示在文件属性的详细信息页 -->
<AssemblyFileVersion>0.4.2.0</AssemblyFileVersion>
<!-- 信息版本:可包含预发布标签(如0.4.2-beta),优先作为Application.ProductVersion的返回值 -->
<AssemblyInformationalVersion>0.4.2.0</AssemblyInformationalVersion>

2. 验证自动生成的AssemblyInfo

重新构建项目后,查看obj\Debug\net8.0\Project.AssemblyInfo.cs(路径根据你的项目配置调整),应该能看到对应版本的属性:

[assembly: System.Reflection.AssemblyVersionAttribute("0.4.2.0")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("0.4.2.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.4.2.0")]

3. 同步Visual Studio项目属性页

  • 打开项目属性的「应用程序」选项卡,点击「程序集信息」按钮,配置的版本值会自动同步到对应字段。
  • 如果需要让「包-常规」页面的「包版本」同步,可在.csproj中添加<Version>0.4.2.0</Version>$(VersionPrefix)会自动引用该值,包版本也会更新。

4. 代码中获取版本的可靠方式

using System.Reflection;
using System.Diagnostics;

var assembly = Assembly.GetExecutingAssembly();
// 获取程序集版本
var assemblyVersion = assembly.GetName().Version?.ToString();
// 获取文件版本
var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
// 获取信息版本
var infoVersion = assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;

额外说明

  • 如果需要手动维护AssemblyInfo.cs,可在.csproj中添加<GenerateAssemblyInfo>false</GenerateAssemblyInfo>禁用自动生成,但推荐使用SDK自动生成的方式简化版本管理。
  • 版本属性优先级:显式配置的属性会覆盖默认值;AssemblyInformationalVersion未设置时,会继承Version属性的值;Version未设置则默认使用1.0.0

内容的提问来源于stack exchange,提问作者Steve Stover

火山引擎 最新活动