提前输出运行时版本
大石头 authored at 2025-07-07 23:13:15
2.34 KiB
LuckyClover
using System;
using System.Reflection;

namespace LuckyClover;

#if NET20
delegate void Action();
#endif

internal class Program
{
    private static void Main(String[] args)
    {
        var cmd = "";
        if (args.Length >= 1) cmd = args[0];

        var asm = Assembly.GetEntryAssembly();
        var ver = asm.GetName().Version + "";
        var fver = ver;
        var vers = asm.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false);
        if (vers != null && vers.Length > 0)
        {
            var vatt = vers[0] as AssemblyFileVersionAttribute;
            if (!String.IsNullOrEmpty(vatt.Version)) fver = vatt.Version;
        }

        Console.WriteLine("幸运草 LuckyAOT v{0}", fver);
        //Console.WriteLine("无依赖编译为linux-arm/linux-x86/windows,用于自动安装主流.NET运行时");
#if NETFRAMEWORK
            var atts = asm.GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false);
            Console.WriteLine((atts[0] as AssemblyDescriptionAttribute).Description);
#else
        Console.WriteLine(asm.GetCustomAttribute<AssemblyDescriptionAttribute>()?.Description);
#endif
        Console.WriteLine("{0}", Environment.OSVersion);
        Console.WriteLine("运行时:{0}", Environment.Version);
        Console.WriteLine("发布:{0:yyyy-MM-dd HH:mm:ss}", GetCompileTime(ver));
        Console.WriteLine();

        Console.ReadKey();
    }

    /// <summary>根据版本号计算得到编译时间</summary>
    /// <param name="version"></param>
    /// <returns></returns>
    public static DateTime GetCompileTime(String version)
    {
        var ss = version?.Split(['.']);
        if (ss == null || ss.Length < 4) return DateTime.MinValue;

        if (!Int32.TryParse(ss[2], out var d)) d = 0;
        if (!Int32.TryParse(ss[3], out var s)) s = 0;
        var y = DateTime.Today.Year;

        // 指定年月日的版本格式 1.0.yyyy.mmdd
        if (d <= y && d >= y - 10)
        {
            var dt = new DateTime(d, 1, 1);
            if (s > 0)
            {
                if (s >= 200) dt = dt.AddMonths(s / 100 - 1);
                s %= 100;
                if (s > 1) dt = dt.AddDays(s - 1);
            }

            return dt;
        }
        else
        {
            var dt = new DateTime(2000, 1, 1);
            dt = dt.AddDays(d).AddSeconds(s * 2);

            return dt;
        }
    }
}