如何将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
相关产品推荐
相关产品推荐

