NavisworksTransport/src/Utils/VersionInfo.cs

201 lines
6.3 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;
namespace NavisworksTransport.Utils
{
/// <summary>
/// 版本信息管理工具类 - 提供统一的版本信息获取
/// </summary>
public static class VersionInfo
{
private static readonly DateTime _startupTime = DateTime.Now;
private static readonly string _buildTimestamp;
private static readonly string _fullVersion;
private static readonly string _shortVersion;
/// <summary>
/// 静态构造函数 - 初始化版本信息
/// </summary>
static VersionInfo()
{
try
{
var assembly = Assembly.GetExecutingAssembly();
var version = assembly.GetName().Version;
// 短版本号: 2.0.0 (使用 AssemblyVersion 的主.次.构建)
_shortVersion = $"{version.Major}.{version.Minor}.{version.Build}";
// 获取程序集文件的构建时间 (从文件修改时间)
DateTime buildDate = GetBuildDate(assembly);
_buildTimestamp = buildDate.ToString("yyyy_MM_dd_HHmmss");
// 完整版本: 2.0.0 Build-2025-03-09-113300
_fullVersion = $"{_shortVersion} Build_{_buildTimestamp}";
}
catch (Exception ex)
{
LogManager.Error($"初始化版本信息失败: {ex.Message}");
_shortVersion = "0.0.0";
_buildTimestamp = DateTime.Now.ToString("yyyy-MM-dd-HHmmss");
_fullVersion = $"{_shortVersion} Build_{_buildTimestamp}";
}
}
/// <summary>
/// 从程序集文件获取构建日期
/// </summary>
private static DateTime GetBuildDate(Assembly assembly)
{
try
{
// 方法1: 从程序集文件的最后修改时间获取
var assemblyLocation = assembly.Location;
if (!string.IsNullOrEmpty(assemblyLocation) && File.Exists(assemblyLocation))
{
var fileInfo = new FileInfo(assemblyLocation);
return fileInfo.LastWriteTime;
}
}
catch (Exception ex)
{
LogManager.Debug($"从文件获取构建日期失败: {ex.Message}");
}
// 回退: 使用当前时间(开发模式)
return DateTime.Now;
}
/// <summary>
/// 获取插件短版本号 (例如: 2.0.0)
/// </summary>
public static string ShortVersion => _shortVersion;
/// <summary>
/// 获取完整版本号 (包含构建时间戳)
/// 格式: 2.0.0 Build-20250309-113300
/// </summary>
public static string FullVersion => _fullVersion;
/// <summary>
/// 获取构建时间戳
/// 格式: 20250309-113300
/// </summary>
public static string BuildTimestamp => _buildTimestamp;
/// <summary>
/// 获取 Navisworks 版本信息
/// </summary>
public static string GetNavisworksVersion()
{
try
{
var version = Autodesk.Navisworks.Api.Application.Version;
if (version != null)
{
// 计算年份:主版本号 + 2003
// 23 + 2003 = 2026, 22 + 2003 = 2025
int year = version.RuntimeMajor + 2003;
return $"{version.Runtime} {year} ({version.RuntimeLanguage})";
}
return "未运行";
}
catch (Exception ex)
{
LogManager.Error($"获取Navisworks版本失败: {ex.Message}");
return "未知版本";
}
}
/// <summary>
/// 获取当前内存使用情况
/// </summary>
public static string GetMemoryUsage()
{
try
{
long memoryBytes = GC.GetTotalMemory(false);
Process process = Process.GetCurrentProcess();
long workingSetMB = process.WorkingSet64 / 1024 / 1024;
return $"{workingSetMB} MB";
}
catch (Exception ex)
{
LogManager.Error($"获取内存使用失败: {ex.Message}");
return "--";
}
}
/// <summary>
/// 获取插件运行时间
/// </summary>
public static string GetRunningTime()
{
try
{
TimeSpan elapsed = DateTime.Now - _startupTime;
if (elapsed.TotalDays >= 1)
{
return $"{elapsed.Days}天 {elapsed.Hours:D2}:{elapsed.Minutes:D2}:{elapsed.Seconds:D2}";
}
return $"{elapsed.Hours:D2}:{elapsed.Minutes:D2}:{elapsed.Seconds:D2}";
}
catch (Exception ex)
{
LogManager.Error($"获取运行时间失败: {ex.Message}");
return "--";
}
}
/// <summary>
/// 获取系统信息汇总
/// </summary>
public static SystemInfo GetSystemInfo()
{
return new SystemInfo
{
PluginVersion = FullVersion,
NavisworksVersion = GetNavisworksVersion(),
MemoryUsage = GetMemoryUsage(),
RunningTime = GetRunningTime(),
BuildTimestamp = BuildTimestamp
};
}
}
/// <summary>
/// 系统信息数据类
/// </summary>
public class SystemInfo
{
/// <summary>
/// 插件版本
/// </summary>
public string PluginVersion { get; set; }
/// <summary>
/// Navisworks版本
/// </summary>
public string NavisworksVersion { get; set; }
/// <summary>
/// 内存使用
/// </summary>
public string MemoryUsage { get; set; }
/// <summary>
/// 运行时间
/// </summary>
public string RunningTime { get; set; }
/// <summary>
/// 构建时间戳
/// </summary>
public string BuildTimestamp { get; set; }
}
}