导读:本期聚焦于小伙伴创作的《C#怎么获取文件版本号?C#如何读取程序集的版本信息?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#怎么获取文件版本号?C#如何读取程序集的版本信息?》有用,将其分享出去将是对创作者最好的鼓励。

在C#开发中,获取文件版本号和程序集版本信息是常见需求,比如做软件版本校验、更新检测或者日志记录时都需要用到这些属性。文件版本号是Windows系统给文件标注的版本信息,而程序集版本是.NET程序集特有的元数据信息,两者的获取方式有所不同。

两种版本信息的区别

首先要明确两个概念的差异,避免获取错误的信息:

  • 文件版本号:属于Windows文件属性的一部分,存储在文件的资源信息中,所有类型的Windows文件(exe、dll等)都可以有这个属性,通过系统API可以读取。
  • 程序集版本:是.NET程序集的元数据属性,定义在程序集的特性中,只有.NET程序集才有这个属性,通过反射可以读取。

获取文件版本号的方法

获取普通文件的版本号可以使用System.Diagnostics.FileVersionInfo类,这个类提供了读取文件版本相关属性的方法。

示例代码

using System;
using System.Diagnostics;

class Program
{
    static void Main()
    {
        // 要获取版本的文件路径,这里以当前运行的程序为例
        string filePath = Environment.GetCommandLineArgs()[0];
        // 获取文件的版本信息对象
        FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(filePath);
        
        // 输出文件版本相关属性
        Console.WriteLine("文件版本号: " + fileVersionInfo.FileVersion);
        Console.WriteLine("产品版本号: " + fileVersionInfo.ProductVersion);
        Console.WriteLine("文件描述: " + fileVersionInfo.FileDescription);
        Console.WriteLine("产品名称: " + fileVersionInfo.ProductName);
    }
}

上面的代码中,GetVersionInfo方法接收一个文件路径作为参数,返回一个FileVersionInfo实例,通过这个实例可以拿到文件版本、产品版本等多个属性。如果要获取其他文件的版本,只需要把filePath换成对应文件的完整路径即可。

获取程序集版本信息的方法

获取.NET程序集的版本信息需要使用反射相关的类,主要是System.Reflection.Assembly类。

获取当前程序集版本

如果要获取当前正在运行的程序集的版本,可以使用Assembly.GetExecutingAssembly方法:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        // 获取当前执行的程序集
        Assembly currentAssembly = Assembly.GetExecutingAssembly();
        // 获取程序集的版本信息
        Version assemblyVersion = currentAssembly.GetName().Version;
        
        Console.WriteLine("程序集版本号: " + assemblyVersion);
        Console.WriteLine("主版本: " + assemblyVersion.Major);
        Console.WriteLine("次版本: " + assemblyVersion.Minor);
        Console.WriteLine("生成号: " + assemblyVersion.Build);
        Console.WriteLine("修订号: " + assemblyVersion.Revision);
    }
}

获取指定路径的程序集版本

如果要获取指定路径下的程序集版本,可以使用Assembly.LoadFrom方法加载程序集后再读取版本:

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        try
        {
            // 指定程序集的路径,这里替换为实际的dll或者exe路径
            string assemblyPath = @"C:testMyLibrary.dll";
            // 加载指定路径的程序集
            Assembly targetAssembly = Assembly.LoadFrom(assemblyPath);
            // 获取程序集版本
            Version version = targetAssembly.GetName().Version;
            Console.WriteLine("目标程序集版本: " + version);
        }
        catch (Exception ex)
        {
            Console.WriteLine("获取程序集版本失败: " + ex.Message);
        }
    }
}

需要注意的是,使用Assembly.LoadFrom加载程序集时,如果程序集依赖的其他文件不在搜索路径下,可能会抛出异常,实际使用时需要做好异常处理。

常见问题说明

  • 如果文件没有设置版本信息,FileVersionInfo.FileVersion可能会返回空值,使用前最好做非空判断。
  • 程序集版本是编译时确定的,修改文件版本不会影响程序集版本,两者是独立的属性。
  • 如果要获取的是.NET Core或者.NET 5+的程序集版本,上述反射方法同样适用,没有版本差异。
实际开发中可以根据需求选择对应的方法,如果是需要和系统文件版本保持一致就用FileVersionInfo,如果是.NET程序自身的版本管理就用程序集版本的方式。

C#文件版本号程序集版本AssemblyFileVersionInfo修改时间:2026-07-23 18:51:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。