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

如何将DLL产品版本转换为Int64类型?有无更优实现方案

无需解析字符串,直接将DLL产品版本转为Int64的最优方法

你不需要解析版本字符串,直接利用FileVersionInfo提供的原生版本属性就能高效完成转换,这比字符串解析更可靠、性能更好。

FileVersionInfo类本身就暴露了四个单独的产品版本组成部分:

  • ProductMajorPart:主版本号(对应示例中的10)
  • ProductMinorPart:次版本号(对应示例中的0)
  • ProductBuildPart:构建版本号(对应示例中的1904)
  • ProductPrivatePart:私有版本号(对应示例中的5072)

你可以将这四个16位的数值按顺序拼接成一个64位整数,完全匹配你需要的格式。修改后的代码如下:

public void CheckApi(string apiName, ref long apiVersion)
{
    FileVersionInfo versionInfo = FileVersionInfo.GetVersionInfo(apiName);
    
    // 将四个版本部分按顺序组合成Int64:主版本(16位) + 次版本(16位) + 构建版本(16位) + 私有版本(16位)
    apiVersion = 
        ((long)versionInfo.ProductMajorPart << 48) |
        ((long)versionInfo.ProductMinorPart << 32) |
        ((long)versionInfo.ProductBuildPart << 16) |
        versionInfo.ProductPrivatePart;
}

说明:

  • 每个版本部分被转换为16位无符号整数范围(0-65535),完全覆盖Windows版本号的常规取值范围
  • 通过位运算左移拼接,直接生成你需要的64位版本值(比如示例中的10.0.1904.5072会被转换为0x000A0000077013D0)
  • 这种方式避免了字符串解析可能带来的格式异常(比如版本字符串包含额外字符、格式不规范等问题),且性能更优

版本比较示例:

如果你的程序要求最低版本为10.0.1904.5000,可以预先计算出对应的Int64值,然后直接比较:

long minRequiredVersion = ((long)10 << 48) | ((long)0 << 32) | ((long)1904 << 16) | 5000;
if (apiVersion >= minRequiredVersion)
{
    // 版本满足要求
}
else
{
    // 版本过低
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:06:16