C# 程序发布时加入发布时间

1. 修改 .csproj 文件‌

在 中添加以下配置,利用 MSBuild 的时间函数生成时间戳:

复制代码
<PropertyGroup>
    <!-- 其他配置... -->
    <AssemblyMetadata Include="BuildTime" Value="$([System.DateTime]::Now.ToString('yyyy-MM-dd HH:mm:ss'))" />
</PropertyGroup>

注意‌:(\[System.DateTime\]::Now...) 是 MSBuild 的属性函数语法,能确保在编译时刻获取时间。如果使用的是较旧版本的 MSBuild 或特定 CI 环境,也可以使用 (DateTime) 变量(需确保格式正确,如 yyyy-MM-dd HH:mm:ss)。‌注意‌:(\[System.DateTime\]::Now...) 是 MSBuild 的属性函数语法,能确保在编译时刻获取时间。如果使用的是较旧版本的 MSBuild 或特定 CI 环境,也可以使用 (DateTime) 变量(需确保格式正确,如 yyyy-MM-dd HH:mm:ss)。

‌2. 在代码中读取
复制代码
using System;
using System.Reflection;
using System.Linq;

public static string GetBuildTime()
{
    var assembly = Assembly.GetExecutingAssembly();
    // 查找名为 "BuildTime" 的自定义元数据
    var attribute = assembly.GetCustomAttribute<AssemblyMetadataAttribute>();
    
    // 如果有多个元数据,可能需要筛选 Key
    var buildTimeAttr = assembly.GetCustomAttributes<AssemblyMetadataAttribute>()
                                .FirstOrDefault(a => a.Key == "BuildTime");

    if (buildTimeAttr != null)
    {
        return buildTimeAttr.Value;
    }
    
    return "Unknown";
}

时间准确,反映实际编译时刻。

不依赖文件系统,不受部署方式(如 ZIP 解压、复制)影响。

适合 CI/CD 环境。

相关推荐
影寂ldy2 小时前
C# UdpClient 单播 三种通信版本
stm32·单片机·c#
qq_150841992 小时前
移植CVI2010+MySQL+CH341DLL到C#+SQLite+CH341DLLA64(更新)
sqlite·c#·ch341dlla64
Lost of 程序猿2 小时前
C# 12 / .NET 9 新特性机制深度:编译器替你写了什么,哪些糖吃下去会出事
windows·c#·.net
z落落5 小时前
C# WinForm Socket 转串口设备服务器+Modbus CRC16校验+Socket 客户端
服务器·开发语言·c#
淡海水13 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
典典分享指南16 小时前
一品牌多产品线的 GEO 内容矩阵:从策略到落地
java·c#·bash·symfony
今夜有雨.16 小时前
C# 学习文档(零基础入门)
开发语言·学习·c#
软件黑马王子17 小时前
14.事件中心:主要作用和原理
开发语言·前端框架·c#
海盗123421 小时前
微软技术周报 2026-08-31~09-07:GPT-6 Astra 登陆 Foundry、M365 全球认证故障复盘、C# 15 封闭层级
gpt·microsoft·c#