给版本号增加Build Version;实现系统信息的实时获取
This commit is contained in:
parent
6e6932394a
commit
0fbff5f114
@ -29,8 +29,6 @@ using System.Runtime.InteropServices;
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
//可以指定所有这些值,也可以使用"生成号"和"修订号"的默认值
|
||||
//通过使用 "*",如下所示:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("2.0.0.0")]
|
||||
// 主版本和次版本手动维护,Build和Revision在编译时自动更新
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@ -325,6 +325,7 @@
|
||||
<Compile Include="src\Utils\NavisworksSelectionHelper.cs" />
|
||||
<Compile Include="src\Utils\NavisworksToDMesh3Converter.cs" />
|
||||
<Compile Include="src\Utils\UnitsConverter.cs" />
|
||||
<Compile Include="src\Utils\VersionInfo.cs" />
|
||||
<!-- Coordinate System -->
|
||||
<Compile Include="src\Utils\CoordinateSystem\CoordinateSystemType.cs" />
|
||||
<Compile Include="src\Utils\CoordinateSystem\ICoordinateSystem.cs" />
|
||||
|
||||
@ -736,7 +736,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
public ICommand BrowseOutputDirectoryCommand { get; private set; }
|
||||
public ICommand SaveSelectedItemsCommand { get; private set; }
|
||||
public ICommand CancelOperationCommand { get; private set; }
|
||||
public ICommand DiagnosticCommand { get; private set; }
|
||||
public ICommand TestExportToNwdCommand { get; private set; }
|
||||
|
||||
// 楼层属性相关命令
|
||||
@ -897,10 +896,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
|
||||
CancelOperationCommand = new RelayCommand(CancelOperation, () => IsProcessing);
|
||||
|
||||
DiagnosticCommand = new RelayCommand(
|
||||
async () => await RunDiagnosticAsync(),
|
||||
() => IsNotProcessing);
|
||||
|
||||
TestExportToNwdCommand = new RelayCommand(
|
||||
async () => await TestExportToNwdAsync(),
|
||||
() => IsNotProcessing);
|
||||
@ -2041,214 +2036,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 运行环境诊断 - 检查Navisworks API环境
|
||||
/// </summary>
|
||||
private async Task RunDiagnosticAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
LogManager.Info("[LayerManagementViewModel] 开始环境诊断");
|
||||
|
||||
// 1. 初始UI状态更新
|
||||
await _uiStateManager.ExecuteUIUpdateAsync(() =>
|
||||
{
|
||||
IsProcessing = true;
|
||||
CurrentOperationText = "正在进行环境诊断...";
|
||||
UpdateMainStatus("检查Navisworks API环境和线程状态");
|
||||
});
|
||||
|
||||
// 2. 纯业务逻辑执行(后台线程)
|
||||
string diagnosticReport = await Task.Run(() =>
|
||||
{
|
||||
return CreateDiagnosticReport();
|
||||
});
|
||||
|
||||
// 3. 结果UI更新
|
||||
await _uiStateManager.ExecuteUIUpdateAsync(() =>
|
||||
{
|
||||
CurrentOperationText = "环境诊断完成";
|
||||
UpdateMainStatus("环境诊断报告已生成");
|
||||
});
|
||||
|
||||
// 显示诊断结果
|
||||
ShowDiagnosticResult(diagnosticReport);
|
||||
|
||||
LogManager.Info("[LayerManagementViewModel] 环境诊断完成");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"[LayerManagementViewModel] 环境诊断异常: {ex.Message}", ex);
|
||||
|
||||
// 异常UI更新
|
||||
await _uiStateManager.ExecuteUIUpdateAsync(() =>
|
||||
{
|
||||
CurrentOperationText = "环境诊断异常";
|
||||
UpdateMainStatus($"诊断失败: {ex.Message}");
|
||||
});
|
||||
|
||||
ShowDiagnosticResult($"诊断过程中发生异常: {ex.Message}");
|
||||
}
|
||||
finally
|
||||
{
|
||||
// 4. 清理UI状态
|
||||
await _uiStateManager.ExecuteUIUpdateAsync(() =>
|
||||
{
|
||||
IsProcessing = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建环境诊断报告
|
||||
/// </summary>
|
||||
/// <returns>诊断报告</returns>
|
||||
private string CreateDiagnosticReport()
|
||||
{
|
||||
var report = new System.Text.StringBuilder();
|
||||
report.AppendLine("=== Navisworks API环境诊断报告 ===");
|
||||
|
||||
try
|
||||
{
|
||||
// 1. 线程状态
|
||||
var apartmentState = System.Threading.Thread.CurrentThread.GetApartmentState();
|
||||
report.AppendLine($"线程状态: {apartmentState} {(apartmentState == System.Threading.ApartmentState.STA ? "✓" : "✗")}");
|
||||
|
||||
// 2. API可用性
|
||||
try
|
||||
{
|
||||
var app = Autodesk.Navisworks.Api.Application.ActiveDocument;
|
||||
report.AppendLine("API可用性: 可用 ✓");
|
||||
}
|
||||
catch (Exception apiEx)
|
||||
{
|
||||
report.AppendLine($"API可用性: 异常 - {apiEx.Message} ✗");
|
||||
}
|
||||
|
||||
// 3. 文档状态
|
||||
try
|
||||
{
|
||||
var document = Autodesk.Navisworks.Api.Application.ActiveDocument;
|
||||
if (document != null)
|
||||
{
|
||||
report.AppendLine($"活动文档: {document.FileName ?? "未命名"} ✓");
|
||||
report.AppendLine($"模型数量: {document.Models?.Count ?? 0}");
|
||||
}
|
||||
else
|
||||
{
|
||||
report.AppendLine("活动文档: 无 ✗");
|
||||
}
|
||||
}
|
||||
catch (Exception docEx)
|
||||
{
|
||||
report.AppendLine($"活动文档: 异常 - {docEx.Message} ✗");
|
||||
}
|
||||
|
||||
// 4. 内存状态
|
||||
long memoryMB = GC.GetTotalMemory(false) / 1024 / 1024;
|
||||
report.AppendLine($"当前内存: {memoryMB} MB");
|
||||
|
||||
report.AppendLine("=== 诊断完成 ===");
|
||||
|
||||
string result = report.ToString();
|
||||
LogManager.Info($"[LayerManagement] 环境诊断报告:\n{result}");
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
string error = $"诊断过程出错: {ex.Message}";
|
||||
report.AppendLine(error);
|
||||
LogManager.Error($"[LayerManagement] {error}");
|
||||
return report.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 显示环境诊断结果对话框
|
||||
/// </summary>
|
||||
private void ShowDiagnosticResult(string report)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Windows.Application.Current.Dispatcher.BeginInvoke(new Action(() =>
|
||||
{
|
||||
var diagWindow = new Window
|
||||
{
|
||||
Title = "Navisworks API环境诊断",
|
||||
Width = 600,
|
||||
Height = 500,
|
||||
WindowStartupLocation = WindowStartupLocation.CenterScreen,
|
||||
ResizeMode = ResizeMode.CanResize
|
||||
};
|
||||
|
||||
var textBox = new System.Windows.Controls.TextBox
|
||||
{
|
||||
Text = report,
|
||||
IsReadOnly = true,
|
||||
VerticalScrollBarVisibility = System.Windows.Controls.ScrollBarVisibility.Auto,
|
||||
HorizontalScrollBarVisibility = System.Windows.Controls.ScrollBarVisibility.Auto,
|
||||
FontFamily = new System.Windows.Media.FontFamily("Consolas"),
|
||||
FontSize = 12,
|
||||
Margin = new Thickness(10),
|
||||
TextWrapping = TextWrapping.Wrap
|
||||
};
|
||||
|
||||
var panel = new System.Windows.Controls.DockPanel();
|
||||
|
||||
var buttonPanel = new System.Windows.Controls.StackPanel
|
||||
{
|
||||
Orientation = System.Windows.Controls.Orientation.Horizontal,
|
||||
HorizontalAlignment = HorizontalAlignment.Right,
|
||||
Margin = new Thickness(10)
|
||||
};
|
||||
System.Windows.Controls.DockPanel.SetDock(buttonPanel, System.Windows.Controls.Dock.Bottom);
|
||||
|
||||
var copyButton = new System.Windows.Controls.Button
|
||||
{
|
||||
Content = "复制报告",
|
||||
Width = 80,
|
||||
Height = 25,
|
||||
Margin = new Thickness(0, 0, 10, 0)
|
||||
};
|
||||
copyButton.Click += (s, e) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Windows.Clipboard.SetText(report);
|
||||
MessageBox.Show("诊断报告已复制到剪贴板", "复制成功", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
MessageBox.Show($"复制失败: {ex.Message}", "复制错误", MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
}
|
||||
};
|
||||
|
||||
var closeButton = new System.Windows.Controls.Button
|
||||
{
|
||||
Content = "关闭",
|
||||
Width = 80,
|
||||
Height = 25,
|
||||
IsDefault = true
|
||||
};
|
||||
closeButton.Click += (s, e) => diagWindow.Close();
|
||||
|
||||
buttonPanel.Children.Add(copyButton);
|
||||
buttonPanel.Children.Add(closeButton);
|
||||
panel.Children.Add(buttonPanel);
|
||||
panel.Children.Add(textBox);
|
||||
|
||||
diagWindow.Content = panel;
|
||||
diagWindow.ShowDialog();
|
||||
}));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"[LayerManagementViewModel] 显示诊断结果失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 测试ExportToNwd API - 专门的导出API
|
||||
/// </summary>
|
||||
|
||||
@ -3,6 +3,7 @@ using System.Collections.ObjectModel;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Threading;
|
||||
using NavisworksTransport.UI.WPF.Collections;
|
||||
using NavisworksTransport.Core;
|
||||
using NavisworksTransport.Core.Config;
|
||||
@ -41,6 +42,9 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
// 🔧 修复:添加释放状态标志
|
||||
private bool _disposed = false;
|
||||
|
||||
// 系统信息刷新定时器
|
||||
private DispatcherTimer _systemInfoTimer;
|
||||
|
||||
#endregion
|
||||
|
||||
#region 公共属性
|
||||
@ -156,7 +160,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
|
||||
public ICommand ViewLogCommand { get; private set; }
|
||||
public ICommand OpenSettingsCommand { get; private set; }
|
||||
public ICommand CheckUpdateCommand { get; private set; }
|
||||
public ICommand GeneratePerformanceReportCommand { get; private set; }
|
||||
public ICommand DiagnosticCommand { get; private set; }
|
||||
|
||||
@ -294,7 +297,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
// 系统管理命令
|
||||
ViewLogCommand = new RelayCommand(() => ExecuteViewLog());
|
||||
OpenSettingsCommand = new RelayCommand(() => ExecuteOpenSettings());
|
||||
CheckUpdateCommand = new RelayCommand(() => ExecuteCheckUpdate());
|
||||
GeneratePerformanceReportCommand = new RelayCommand(() => ExecuteGeneratePerformanceReport());
|
||||
DiagnosticCommand = new RelayCommand(() => ExecuteDiagnostic());
|
||||
|
||||
@ -588,13 +590,19 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
var currentLevel = LogManager.GetLogLevel();
|
||||
SelectedLogLevel = currentLevel.ToString();
|
||||
|
||||
// 初始化系统信息
|
||||
PluginVersion = "v1.0";
|
||||
NavisworksVersion = "2026";
|
||||
// 初始化系统信息 - 使用动态获取
|
||||
var systemInfo = VersionInfo.GetSystemInfo();
|
||||
PluginVersion = systemInfo.PluginVersion;
|
||||
NavisworksVersion = systemInfo.NavisworksVersion;
|
||||
MemoryUsage = systemInfo.MemoryUsage;
|
||||
RunningTime = systemInfo.RunningTime;
|
||||
|
||||
// 初始化数据库状态(如果数据库已连接)
|
||||
RefreshDatabaseStatus();
|
||||
|
||||
// 启动系统信息定时刷新
|
||||
StartSystemInfoTimer();
|
||||
|
||||
UpdateMainStatus("系统管理初始化完成");
|
||||
});
|
||||
|
||||
@ -680,47 +688,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
}, "打开设置");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 检查更新 (已优化为Idle事件监听)
|
||||
/// </summary>
|
||||
private void ExecuteCheckUpdate()
|
||||
{
|
||||
SafeExecute(() =>
|
||||
{
|
||||
UpdateMainStatus("正在检查更新...");
|
||||
|
||||
// 使用Idle事件监听替代Thread.Sleep(2000)
|
||||
const string taskId = "SystemManagement_CheckUpdate";
|
||||
var startTime = DateTime.Now;
|
||||
|
||||
IdleEventManager.Instance.RegisterOnceTask(
|
||||
taskId,
|
||||
() => (DateTime.Now - startTime).TotalMilliseconds >= 2000, // 2秒后条件满足
|
||||
() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
// 检查释放状态,避免在释放后更新UI
|
||||
if (_disposed)
|
||||
{
|
||||
LogManager.Info("SystemManagementViewModel已释放,跳过更新检查UI更新");
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateMainStatus("当前版本已是最新版本");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"更新检查UI更新失败: {ex.Message}");
|
||||
}
|
||||
},
|
||||
8 // 高优先级
|
||||
);
|
||||
|
||||
LogManager.Info("检查更新 (使用Idle事件监听)");
|
||||
}, "检查更新");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 生成性能报告 (已优化为Idle事件监听)
|
||||
/// </summary>
|
||||
@ -805,7 +772,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
private string DiagnoseEnvironment()
|
||||
{
|
||||
var report = new System.Text.StringBuilder();
|
||||
report.AppendLine("=== Navisworks API环境诊断报告 ===");
|
||||
|
||||
try
|
||||
{
|
||||
@ -852,8 +818,6 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
report.AppendLine($"Navisworks版本: {NavisworksVersion}");
|
||||
report.AppendLine("系统状态: 正常");
|
||||
|
||||
report.AppendLine("=== 诊断完成 ===");
|
||||
|
||||
string result = report.ToString();
|
||||
LogManager.Info($"[SystemManagement] 环境诊断报告:\n{result}");
|
||||
return result;
|
||||
@ -1850,6 +1814,68 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动系统信息定时刷新
|
||||
/// </summary>
|
||||
private void StartSystemInfoTimer()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_systemInfoTimer == null)
|
||||
{
|
||||
_systemInfoTimer = new DispatcherTimer
|
||||
{
|
||||
Interval = TimeSpan.FromSeconds(5) // 每5秒刷新一次
|
||||
};
|
||||
_systemInfoTimer.Tick += (s, e) => RefreshSystemInfo();
|
||||
}
|
||||
|
||||
_systemInfoTimer.Start();
|
||||
LogManager.Debug("系统信息定时器已启动 (5秒间隔)");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Error($"启动系统信息定时器失败: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 停止系统信息定时刷新
|
||||
/// </summary>
|
||||
private void StopSystemInfoTimer()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (_systemInfoTimer != null)
|
||||
{
|
||||
_systemInfoTimer.Stop();
|
||||
_systemInfoTimer.Tick -= (s, e) => { };
|
||||
_systemInfoTimer = null;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Warning($"停止系统信息定时器时出现警告: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 刷新系统信息 (内存、运行时间)
|
||||
/// </summary>
|
||||
private void RefreshSystemInfo()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 使用 VersionInfo 获取最新的内存和运行时间
|
||||
MemoryUsage = VersionInfo.GetMemoryUsage();
|
||||
RunningTime = VersionInfo.GetRunningTime();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Debug($"刷新系统信息时出错: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public void Cleanup()
|
||||
{
|
||||
try
|
||||
@ -1882,6 +1908,17 @@ namespace NavisworksTransport.UI.WPF.ViewModels
|
||||
LogManager.Debug($"清理一次性Idle任务时出现提示: {ex.Message}");
|
||||
}
|
||||
|
||||
// 停止系统信息定时器
|
||||
try
|
||||
{
|
||||
StopSystemInfoTimer();
|
||||
LogManager.Debug("SystemManagementViewModel系统信息定时器已停止");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogManager.Debug($"停止系统信息定时器时出现提示: {ex.Message}");
|
||||
}
|
||||
|
||||
LogManager.Info("SystemManagementViewModel资源清理完成");
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -2,10 +2,11 @@
|
||||
NavisworksTransport 系统管理页签视图 - 采用与其他页签一致的Navisworks 2026风格
|
||||
|
||||
功能说明:
|
||||
1. 日志管理:查看、清空、导出日志,设置日志级别
|
||||
2. 插件设置:设置选项、重置设置、导入配置、启用选项
|
||||
3. 系统信息:插件版本、Navisworks版本、系统状态、内存使用、运行时间
|
||||
4. 性能监控:性能信息和性能报告生成
|
||||
1. 数据管理:备份、恢复、修复数据库
|
||||
2. 日志管理:查看、清空、导出日志,设置日志级别
|
||||
3. 插件设置:设置选项、重置设置、导入配置、启用选项
|
||||
4. 系统信息:插件版本、Navisworks版本、内存使用、运行时间
|
||||
5. 功能测试:测试新功能和实验性特性
|
||||
|
||||
设计原则:与Navisworks 2026风格一致,480像素宽度,现代化UI布局,采用Border分组
|
||||
-->
|
||||
@ -198,7 +199,7 @@ NavisworksTransport 系统管理页签视图 - 采用与其他页签一致的Nav
|
||||
<Label Content="系统信息" Style="{StaticResource SectionHeaderStyle}"/>
|
||||
|
||||
<!-- 系统信息表格 -->
|
||||
<Grid Margin="0,10,0,15">
|
||||
<Grid Margin="0,10,0,10">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
@ -225,11 +226,12 @@ NavisworksTransport 系统管理页签视图 - 采用与其他页签一致的Nav
|
||||
<Label Grid.Row="4" Grid.Column="1" Content="{Binding RunningTime}" Style="{StaticResource InfoTextStyle}"/>
|
||||
</Grid>
|
||||
|
||||
<!-- 更新检查按钮 -->
|
||||
<StackPanel Orientation="Horizontal">
|
||||
<Button Content="检查更新"
|
||||
Command="{Binding CheckUpdateCommand}"
|
||||
Style="{StaticResource SecondaryButtonStyle}"/>
|
||||
<!-- 系统操作按钮 -->
|
||||
<StackPanel Orientation="Horizontal" Margin="0,5,0,5">
|
||||
<Button Content="环境检查"
|
||||
Style="{StaticResource SecondaryButtonStyle}"
|
||||
Command="{Binding DiagnosticCommand}"
|
||||
ToolTip="检查运行环境和线程状态"/>
|
||||
|
||||
<Button Content="导出剖面盒"
|
||||
Command="{Binding ExportSectionBoxCommand}"
|
||||
@ -238,23 +240,8 @@ NavisworksTransport 系统管理页签视图 - 采用与其他页签一致的Nav
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- 区域4: 性能监控 -->
|
||||
<Border BorderBrush="#FFD4E7FF" BorderThickness="1" CornerRadius="0" Margin="0,0,0,15" Padding="12">
|
||||
<StackPanel>
|
||||
<Label Content="性能监控" Style="{StaticResource SectionHeaderStyle}"/>
|
||||
|
||||
<!-- 环境检查按钮 -->
|
||||
<StackPanel Orientation="Horizontal" Margin="0,5,0,5">
|
||||
<Button Content="环境检查"
|
||||
Style="{StaticResource SecondaryButtonStyle}"
|
||||
Command="{Binding DiagnosticCommand}"
|
||||
ToolTip="检查运行环境和线程状态"/>
|
||||
</StackPanel>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- 区域5: 功能测试 -->
|
||||
<!-- 区域4: 功能测试 -->
|
||||
<Border BorderBrush="#FFD4E7FF" BorderThickness="1" CornerRadius="0" Margin="0,0,0,15" Padding="12">
|
||||
<StackPanel>
|
||||
<Label Content="功能测试" Style="{StaticResource SectionHeaderStyle}"/>
|
||||
|
||||
200
src/Utils/VersionInfo.cs
Normal file
200
src/Utils/VersionInfo.cs
Normal file
@ -0,0 +1,200 @@
|
||||
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; }
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user