You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在.NET Core启动代码(Startup.cs)中运行时获取程序集包版本?

在.NET Core Startup中获取程序集包版本的方法

嘿,这个问题我刚好有实践经验,完全可以在Startup.cs的启动流程里获取到你在.csproj中设置的<Version>字段值,给你分享几种靠谱的方法:

方法一:从Startup所在程序集直接获取

如果你的Startup类和.csproj里配置Version的是同一个项目,直接通过当前程序集的特性就能拿到值:

using System.Reflection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 获取Startup所在的程序集,写法更直观
        var currentAssembly = typeof(Startup).Assembly;
        
        // 读取AssemblyInformationalVersion特性(对应.csproj里的<Version>字段)
        var versionAttribute = currentAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
        var projectVersion = versionAttribute?.InformationalVersion;

        // 可以在这里使用版本号,比如注入到服务中或者打印日志
        Console.WriteLine($"当前项目版本:{projectVersion}");
    }

    // 其他Startup方法...
}

为什么用AssemblyInformationalVersionAttribute
因为在.NET Core项目中,你在.csproj里设置的<Version>字段,默认会被编译为程序集的AssemblyInformationalVersion特性值,这是最直接对应你配置的版本号的方式。

方法二:获取入口程序集的版本

如果你的Startup类所在项目和程序入口(Program.cs)不是同一个项目,可以通过入口程序集来获取版本:

using System.Reflection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        var entryAssembly = Assembly.GetEntryAssembly();
        var versionAttribute = entryAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
        var entryVersion = versionAttribute?.InformationalVersion;
    }
}

额外注意事项

如果你在.csproj里额外配置了<AssemblyVersion><AssemblyFileVersion>字段,需要注意它们的区别:

  • <Version> → 对应AssemblyInformationalVersionAttribute
  • <AssemblyVersion> → 对应AssemblyVersionAttribute
  • <AssemblyFileVersion> → 对应AssemblyFileVersionAttribute

如果你只是想拿到.csproj里的<Version>值,直接用AssemblyInformationalVersionAttribute就不会错。

内容的提问来源于stack exchange,提问作者Paul Duer

火山引擎 最新活动