You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何查看Windows编译的Native AOT C#程序文件版本?

在Linux下读取针对Windows编译的Native AOT EXE文件版本的解决方案

针对Windows编译的Native AOT EXE是PE格式文件,其版本信息存储在PE资源节的VS_VERSION_INFO结构中。Linux下的FileVersionInfo.GetVersionInfo API主要针对.NET程序集(如DLL),对非.NET程序集的PE格式EXE支持有限,因此会返回null。以下是可行的解决方案:

方法一:使用PE文件解析库提取版本信息

借助跨平台PE文件解析库(如PeNet),直接读取PE资源中的版本信息,无需依赖系统API。

  1. 安装NuGet包:PeNet
  2. 示例代码:
using PeNet;
using PeNet.Header.Resource;

// 读取PE文件
var peFile = new PeFile(exePath);
// 查找版本信息资源
var versionResource = peFile.ResourceDirectory?.FindVersionInfo();

if (versionResource != null)
{
    // 方式1:从版本结构中拼接版本号
    var fileVersion = $"{versionResource.FileVersionMS >> 16}.{versionResource.FileVersionMS & 0xFFFF}.{versionResource.FileVersionLS >> 16}.{versionResource.FileVersionLS & 0xFFFF}";
    
    // 方式2:读取格式化的版本字符串(与Windows显示一致)
    var stringTable = versionResource.StringFileInfo?.FirstOrDefault()?.StringTable;
    var formattedVersion = stringTable?["FileVersion"];
}

该方法跨平台有效,只要目标文件是PE格式EXE即可解析。

方法二:编译时额外嵌入版本信息

在Native AOT编译阶段,将版本号写入其他便于读取的位置:

  • 生成附带版本文件:编译时同步生成version.txt文件并写入版本号,检测程序直接读取该文件内容。
  • 嵌入自定义段:通过编译配置,将版本号嵌入EXE的自定义数据段,检测程序读取文件时扫描该段的固定标识,提取版本号。

方法三:借助Linux命令行工具解析

利用Linux下的PE资源提取工具,通过命令行方式获取版本信息:

  1. 安装工具包:sudo apt-get install icoutils
  2. 调用命令提取版本资源:
wrestool -x -t 14 your-app.exe

(其中14是VS_VERSION_INFO资源的类型ID)
3. 在检测程序中通过Process.Start执行该命令,捕获输出后解析版本字符串。

内容的提问来源于stack exchange,提问作者Alex Zaitsev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:52:35