You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core是否支持类似ASP.NET MVC的程序集版本自动生成与展示

.NET Core(以及后续迭代的.NET 5/6/7/8等版本)完全提供与传统ASP.NET MVC等效的自动生成构建版本、页面展示版本号的能力,仅配置和调用方式存在少量差异,具体实现如下:

1. 配置自动生成动态版本号

传统ASP.NET MVC在AssemblyInfo.cs中标记[assembly: AssemblyVersion("1.0.*")]的逻辑,在SDK风格的.NET Core项目中需要迁移到项目文件(.csproj)中配置。
注意.NET Core默认开启确定性构建,会导致*通配符无法动态生成版本,需要先手动关闭该配置:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <!-- 此处保留项目原有其他配置 -->
    <!-- 关闭确定性构建,允许构建时动态生成版本号 -->
    <Deterministic>false</Deterministic>
    <!-- 版本号前两位固定为主版本、次版本,后两位用*通配符自动生成
         生成规则与传统ASP.NET MVC完全一致:
         第三位Build号:2000年1月1日到构建当日的自然天数
         第四位Revision号:构建当日0点到构建时刻的总秒数除以2
    -->
    <AssemblyVersion>1.0.*</AssemblyVersion>
    <FileVersion>1.0.*</FileVersion>
    <Version>1.0.*</Version>
  </PropertyGroup>
</Project>

配置完成后不需要手动在AssemblyInfo.cs中添加版本相关特性,SDK会自动生成对应程序集属性,手动添加反而会触发重复定义的编译错误。

2. 在Razor页面展示版本号

.NET Core内置的Razor视图没有提供Html.AssemblyVersion()这个扩展方法,可以根据使用场景选以下两种实现方式:

方式一:页面内直接读取(适合简单场景)

不需要额外封装,直接在视图中通过反射读取当前程序集的版本信息即可,对应原页脚的写法如下:

<footer>
    <p>&copy; @DateTime.Now.Year - @System.Reflection.Assembly.GetEntryAssembly()?.GetName().Version</p>
</footer>

方式二:封装HtmlHelper扩展(和旧MVC写法完全一致)

如果想完全沿用旧项目中@Html.AssemblyVersion()的写法,自行实现一个简单的扩展方法即可:
首先新增扩展类:

using System.Reflection;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc.Rendering;

public static class HtmlHelperExtensions
{
    public static IHtmlContent AssemblyVersion(this IHtmlHelper helper)
    {
        var version = Assembly.GetEntryAssembly()?.GetName().Version?.ToString() ?? "unknown";
        return new HtmlString(version);
    }
}

在_ViewImports.cshtml中添加该扩展类所在的命名空间引用后,就可以在所有视图中直接沿用旧写法:

<footer>
    <p>&copy; @DateTime.Now.Year - @Html.AssemblyVersion()</p>
</footer>

注意:如果发布时开启了单文件发布、程序集裁剪,可能出现入口程序集版本读取失败的问题,可以将获取版本的逻辑改为读取当前视图所在程序集Assembly.GetExecutingAssembly()的版本,即可正常取值。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:45:31