【问题标题】:What is the best way to compare two product / assembly versions比较两个产品/装配版本的最佳方法是什么
【发布时间】:2016-06-01 08:31:58
【问题描述】:

假设产品的程序集版本号为 1.5.4537.56784。有很多关于如何在 SO 上检索它的示例,并且在大多数情况下(如果您只是想向最终用户显示信息),那么默认字符串表示就可以了。

我现在发现自己想将这个程序集号与另一个进行比较(这次肯定是存储为字符串,因为它是在线文本文件中(但格式相同))以确定在线存储的版本号是否相同作为从执行程序集中检索的版本号,或者实际上更大。更大这个词很重要,不仅是不同的,而且是积极地更大。

一个简单的字符串比较应该确定它们是否相同,但我认为它不会确定大于。那么我应该考虑将这些刺痛更改为哪种类型,以便进行大于比较。还是我错过了字符串比较中的一些明显的东西。

【问题讨论】:

    标签: vb.net string compare


    【解决方案1】:

    将您的值按. 拆分为整数数组或列表,无论您喜欢哪个。然后对集合中的每个位置使用简单的If x > y 比较。

    Dim myAssemblyVersion = "1.5.4537.56784"
    Dim theirAssemblyVersion = "1.5.4827.1"
    
    Dim myIntegers = myAssemblyVersion.Split(".")
    Dim theirIntegers = theirAssemblyVersion.Split(".")
    
    Dim isTheirsgreater As Boolean = False
    For i = 0 To myIntegers.Count - 1
        If theirIntegers(i) > myIntegers(i) Then
            isTheirsgreater = True
        End If
    Next
    

    【讨论】:

    • 没问题,添加了一个快速示例
    【解决方案2】:

    我想说比较版本的最佳方法是使用System.Version 类提供的比较运算符。您可以使用在线文本文件中找到的字符串创建Version 的新实例。然后您可以使用 GreaterThan 运算符将其与您的应用程序版本进行比较。

    Dim textVer As String = "1.5.4537.56784"
    Dim onlineVer As New Version(textVer)
    Dim myVer As Version = Reflection.Assembly.GetExecutingAssembly.GetName.Version
    
    If onlineVer > myVer Then
        'Version found online is greater than mine
    End If
    

    【讨论】:

    • 感谢您指出这一点。您是否碰巧知道这是检查版本号的所有四个部分还是只检查前三个部分?
    • @DomSinclair 快速测试表明它确实检查了版本的第四部分。
    • 感谢您提供更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 2022-01-01
    相关资源
    最近更新 更多