.Net Winform开发显示程序版本号的常见方式
目录
- 项目准备
- 示例 1:窗体标题栏显示版本号
- 示例 2:Label 中显示版本号
- 示例 3:状态栏中显示版本号
- 示例 4:AboutBox 显示版本号
- 示例 5:读取外部版本文件
- 示例 6:统一封装 VersionHelper 工具类
- 对比总结
- 推荐选择指南
欢迎关注dotnet研习社,今天我们讨论一个Winform开发中的一个常见的需求内容“关于程序的版本号显示”。
在 WinForms 桌面应用程序开发中,向用户显示当前程序的版本号是一个常见的需求,尤其是在产品发布、更新提示或技术支持场景中尤为重要。在.NET 8 中已全面采用 SDK 风格项目,相比旧的 .NET Framework 项目,版本号的设置和读取方式更加规范和现代化。本文将介绍在 WinForms 应用中显示程序版本号的几种常见方式,并附上示例代码,供大家参考和选择。
项目准备
确保我们的 .csproj 是 SDK 风格,并配置版本号:
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<!-- 版本信息设置 -->
<Version>1.2.3</Version>
<FileVersion>1.2.3.0</FileVersion>
<AssemblyVersion>1.2.0.0</AssemblyVersion>
<InformationalVersion>1.2.3-beta</InformationalVersion>
</PropertyGroup>
</Project>
示例 1:窗体标题栏显示版本号
使用 Application.ProductVersion
示例代码:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.Text = $"我的程序 - 版本 {Application.ProductVersion}";
}
}
说明:

- 输出示例:
我的程序 - 版本 1.2.3-beta - 适用于:简洁快速展示,适合主界面。
示例 2:Label 中显示版本号
使用 AssemblyVersion
示例代码:
using System.Reflection;
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
var version = Assembly.GetExecutingAssembly().GetName().Version;
Label lblVersion = new Label
{
Text = $"程序集版本:{version}",
AutoSize = true,
Location = new Point(20, 20)
};
this.Controls.Add(lblVersion);
}
}
说明:

- 输出示例:
程序集版本:1.2.0.0 - 适用于:开发或内部测试查看版本绑定。
示例 3:状态栏中显示版本号
使用 FileVersionInfo
示例代码:
在窗体中添加了 StatusStrip 和 ToolStripStatusLabel 控件,命名为 statusStrip1 和 toolStripStatusLabel1。
using System.Diagnostics;
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
var info = FileVersionInfo.GetVersionInfo(Application.ExecutablePath);
toolStripStatusLabel1.Text = $"文件版本:{info.FileVersion}";
}
}
说明:

- 输出示例:
文件版本:1.2.3.0 - 适用于:状态栏、底部信息区。
示例 4:AboutBox 显示版本号
使用 Application.ProductVersion
添加步骤:
在窗体中添加了 menuStrip 和 toolStripMenuItem 控件,命名为 menuStrip1 和 toolStripMenuItem1。
- 添加 → 新建项 → “关于框(About Box)”
- 在
AboutBox1.cs修改版本号设置:
partial class AboutBox1 : Form
{
public AboutBox1()
{
InitializeComponent();
this.Text = String.Format("关于 {0}", AssemblyTitle);
this.labelProductName.Text = AssemblyProduct;
this.labelVersion.Text = String.Format("版本 {0}"khUBarfM, AssemblyVersion);
this.labelCopyright.Text = AssemblyCopyright;
this.labelCompanyName.Text = AssemblyCompany;
this.textBoxDescription.Text = AssemblyDescription;
}
#region 程序集特性访问器
public string AssemblyTitle
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false);
if (attributes.Length > 0)
{
AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0];
if (titleAttribute.Title != "")
{
return titleAttribute.Title;
}
}
return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase);
}
}
public string AssemblyVersion
{
get
{
return Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
}
public string AssemblyDescription
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute)javascript, false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyDescriptionAttribute)attributes[0]).Description;
}
}
public string AssemblyProduct
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyProductAttribute)attributes[0]).Product;
}
}
public string AssemblyCopyright
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightattribute), false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyCopyrightAttribute)attributes[0]).Copyright;
}
}
public string AssemblyCompany
{
get
{
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false);
if (attributes.Length == 0)
{
return "";
}
return ((AssemblyCompanyAttribute)attributes[0]).Company;
}
}
#endregion
}
调用方式:
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
new AboutBox1().ShowDialog();
}

示例 5:读取外部版本文件
CI 自动生成 version.txt
准备版本文件:
项目发布后输出目录含有 version.txt 内容如:
1.2.3+build.12345
示例代码:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
string versionFile = Path.Combine(AppContext.BaseDirectory, "version.txt");
string buildVersion = File.Exists(versionFile) ? File.ReadAllText(versionFile).Trim() : "Unknown";
Label lbl = new Label
{
Text = $"构建版本:{buildVersion}",
AutoSize = true,
Location = new Point(20, 50)
};
this.Controls.Add(lbl);
}
}

示例 6:统一封装 VersionHelper 工具类
using System.Reflection;
using System.Diagnostics;
public static class VersionHelper
{
public static string AssemblyVersion =>
Assembly.GetExecutingAssembly().GetName().Version?.ToString() ?? "Unknown";
public static string FileVersion =>
FileVersionInfo.GetVersionInfo(Application.ExecutablePath).FileVersion ?? "Unknown";
public static string ProductVersion =>
Application.ProductVersion ??www.devze.com "Unknown";
}
调用方式:
Label lbl = new Label
{
Text = $"程序集版本:{VersionHelper.AssemblyVersion}\n文件版本:{VersionHelper.FileVersion}",
AutoSize = true,
Location = new Point(20, 80)
};
this.Controls.Add(lbl);

对比总结
| 方式编号 | 获取方式 | 来源(csproj 或程序集) | 示例输出 | 推荐用途 | 特点说明 |
|---|---|---|---|---|---|
| ① | Application.ProductVersion | <InformationalVersion>(或 <Version>) | 1.2.3-http://www.devze.combeta | UI显示(标题栏、关于框、Label) | 默认最直观,获取产品版本,强烈推荐 |
| ② | Assembly.GetExecutingAssembly().GetName().Version | <AssemblyVersion> | 1.2.0.0 | 内部模块依赖、调试 | 获取程序集绑定版本,不一定展示给用户 |
| ③ | FileVersionInfo.FileVersion | <FileVersion> | 1.2.3.0 | 状态栏、日志、故障排查 | Windows 文件属性中可见的“文件版本” |
| ④ | FileVersionInfo.ProductVersion | <InformationalVersion>(或 <Versiophpn>) | 1.2.3-beta | 技术支持、版本详情 | 和 Application.ProductVersion 一致 |
| ⑤ | 读取 version.txt、嵌入资源等 | CI/CD 或 Git 自动生成 | 1.2.3+g123abc | 内部构建版本控制 | 灵活但需配合构建脚本或 CI 工具 |
| ⑥ | 自定义 AboutBox 显示 | 可组合 ①~⑤ | 自由定制 | 标准“关于”窗口 | 常用于商业软件,集中展示版本、版权等 |
推荐选择指南
开发初期快速显示:使用 Application.ProductVersion
需要对比程序集版本绑定:使用 AssemblyVersion
需要展示文件详细版本(如系统托盘右键):使用 FileVersionInfo
需要区分构建版本(多环境发布):结合 CI 写入 version.txt
面向最终用户展示:统一写入 AboutBox,使用封装工具类读取版本
以上就是.Net Winform开发显示程序版本号的常见方式的详细内容,更多关于.Net显示程序版本号的资料请关注编程客栈(www.devze.com)其它相关文章!
加载中,请稍侯......
精彩评论