跳到主要内容

DLL版本信息 (DllVersionHelper)

DllVersionHelper 提供DLL库的版本信息和元数据查询,用于诊断、日志记录和兼容性检查。

通过 DllVersionHelper 静态类访问。

版本信息属性

Info

public static DllVersionInfo Info { get; }

获取完整的DLL版本信息结构。

返回值:

  • DllVersionInfo — 包含版本号、构建日期、校验和等完整信息

相关结构:

public struct DllVersionInfo
{
public ushort Major; // 主版本号
public ushort Minor; // 次版本号
public ushort Patch; // 修订号
public ushort Build; // 构建号
public string BuildDate; // 构建日期
}

示例:

var info = DllVersionHelper.Info;
Console.WriteLine($"DLL版本: {info.Major}.{info.Minor}.{info.Patch}.{info.Build}");
Console.WriteLine($"构建日期: {info.BuildDate}");

VersionNumber

public static string VersionNumber { get; }

获取DLL版本号字符串,格式为 X.X.X.X(Major.Minor.Patch.Build)。

返回值:

  • string — 版本号(例如:2.5.2.0

示例:

string version = DllVersionHelper.VersionNumber;
Console.WriteLine($"当前DLL版本: {version}");

// 版本兼容性检查
if (version.StartsWith("2.5"))
{
Console.WriteLine("使用 v2.5 系列");
}

BuildDate

public static string BuildDate { get; }

获取DLL编译日期。

返回值:

  • string — 构建日期(ISO 8601格式)

示例:

string buildDate = DllVersionHelper.BuildDate;
Console.WriteLine($"DLL构建于: {buildDate}");

Checksum

public static string Checksum { get; }

获取DLL的唯一识别码。

返回值:

  • string — 识别码(5个字符)

示例:

string checksum = DllVersionHelper.Checksum;
Console.WriteLine($"DLL校验和: {checksum}");

// 用于唯一标识DLL版本
string uniqueId = $"{DllVersionHelper.VersionNumber}-{checksum}";

完整示例

应用程序日志

在日志中记录DLL版本信息:

using DarraEtherCAT_Master;

class Program
{
static void Main()
{
// 启动时记录版本信息
Console.WriteLine("=== Darra EtherCAT Master ===");
Console.WriteLine($"DLL版本: {DllVersionHelper.VersionNumber}");
Console.WriteLine($"构建日期: {DllVersionHelper.BuildDate}");
Console.WriteLine($"校验和: {DllVersionHelper.Checksum}");
Console.WriteLine("============================");

// 业务逻辑...
}
}

版本兼容性检查

确保应用程序与DLL版本兼容:

public class VersionChecker
{
public static bool CheckCompatibility()
{
var version = DllVersionHelper.VersionNumber;
var major = int.Parse(version.Split('.')[0]);
var minor = int.Parse(version.Split('.')[1]);

// 要求 v2.5 或更高版本
if (major < 2 || (major == 2 && minor < 5))
{
Console.WriteLine($"错误:DLL版本过低({version}),需要 v2.5+");
return false;
}

Console.WriteLine($"DLL版本兼容: {version}");
return true;
}
}

诊断信息收集

生成诊断报告:

public class DiagnosticsReporter
{
public static string GenerateReport()
{
var sb = new StringBuilder();
sb.AppendLine("=== 系统诊断报告 ===");
sb.AppendLine();

// DLL版本信息
sb.AppendLine("DLL信息:");
sb.AppendLine($" 版本: {DllVersionHelper.VersionNumber}");
sb.AppendLine($" 构建: {DllVersionHelper.BuildDate}");
sb.AppendLine($" 校验和: {DllVersionHelper.Checksum}");
sb.AppendLine();

// 系统信息
sb.AppendLine($" 操作系统: {Environment.OSVersion}");
sb.AppendLine($" .NET版本: {Environment.Version}");

return sb.ToString();
}
}

唯一标识符生成

为日志文件或会话生成唯一标识符:

public class SessionManager
{
public static string CreateSessionId()
{
string versionId = DllVersionHelper.Checksum;
string timestamp = DateTime.Now.ToString("yyyyMMddHHmmss");
return $"SESSION_{versionId}_{timestamp}";
}
}

应用启动检查

using System;
using DarraEtherCAT_Master;

class Program
{
static void Main()
{
try
{
// 显示版本信息
PrintVersionInfo();

// 兼容性检查
if (!CheckMinimumVersion(2, 5))
{
Console.WriteLine("程序需要 DLL v2.5 或更高版本");
return;
}

// 启动主站
var master = new DarraEtherCAT();
// ...
}
catch (Exception ex)
{
LogError(ex);
}
}

static void PrintVersionInfo()
{
Console.WriteLine("╔══════════════════════════════════╗");
Console.WriteLine("║ Darra EtherCAT Master ║");
Console.WriteLine("╠══════════════════════════════════╣");
Console.WriteLine($"║ 版本: {DllVersionHelper.VersionNumber,-20} ║");
Console.WriteLine($"║ 构建: {DllVersionHelper.BuildDate,-20} ║");
Console.WriteLine($"║ 校验: {DllVersionHelper.Checksum,-20} ║");
Console.WriteLine("╚══════════════════════════════════╝");
}

static bool CheckMinimumVersion(int minMajor, int minMinor)
{
var parts = DllVersionHelper.VersionNumber.Split('.');
int major = int.Parse(parts[0]);
int minor = int.Parse(parts[1]);

return (major > minMajor) ||
(major == minMajor && minor >= minMinor);
}

static void LogError(Exception ex)
{
var logFile = $"error_{DllVersionHelper.Checksum}_{DateTime.Now:yyyyMMdd}.log";
File.AppendAllText(logFile,
$"[{DateTime.Now}] DLL v{DllVersionHelper.VersionNumber}\n" +
$"{ex}\n\n");
}
}

注意事项

版本管理

在生产环境中,建议记录DLL版本信息到应用程序日志,便于问题追溯和版本管理。

校验和用途

Checksum 是 DLL 版本唯一标识码,主要用于快速区分不同构建版本,不应用于安全验证。

相关功能

版本信息常用于主站构造时的兼容性检查,以及错误处理中的日志记录。