共用方式為


System.Version 類別

本文提供此 API 參考文件的補充備註。

類別 Version 代表元件、作業系統或 Common Language Runtime 的版本號碼。 版本號碼包含兩到四個元件:主要、次要、組建和修訂。 需要主要和次要元件;組建和修訂元件是選擇性的,但如果已定義修訂元件,則需要建置元件。 所有定義的元件都必須是大於或等於 0 的整數。 版本號碼的格式如下(選擇性元件以方括弧顯示):

主要.次要[.建置[.修訂]]

元件會依慣例使用,如下所示:

  • 主要:具有相同名稱但不同主要版本的組件不能互換使用。 较高的版本號碼可能表示产品经过一次主要重写,因此无法假设具有回溯相容性。

  • 次要:如果兩個元件的名稱和主要版本號碼相同,但次要版本號碼不同,這表示具有回溯相容性意圖的重大增強。 這個較高的次要版本號碼可能表示產品的點版本或產品完全回溯相容的新版本。

  • 組建:組建編號的差異代表相同來源的重新編譯。 當處理器、平臺或編譯程式變更時,可能會使用不同的組建編號。

  • 修訂:具有相同名稱、主要和次要版本號碼的程序集,但不同修訂版本的仍應完全可互換。 在修正先前發行元件的安全性漏洞的組建中,可能會使用較高的修訂編號。

只有組建或修訂編號不同的程序集後續版本會被視為先前版本的 Hotfix 更新。

這很重要

尚未明確指派值的屬性 Version 值為未定義 (-1)。

MajorRevisionMinorRevision 屬性可讓您識別應用程式的暫存版本,例如,修正問題,直到您可以釋放永久解決方案為止。 此外,Windows NT作系統會使用 MajorRevision 屬性來編碼 Service Pack 編號。

將版本資訊指派給元件

一般而言,類別 Version 不會用來將版本號碼指派給元件。 相反地,類別 AssemblyVersionAttribute 會用來定義元件的版本,如本文中的範例所示。

擷取版本資訊

Version 物件最常用於儲存有關某些系統或應用程式元件(例如作業系統)、通用語言執行環境、目前應用程式的可執行檔或特定組件的版本資訊。 下列範例說明一些最常見的案例:

  • 檢查操作系統版本。 下列範例會使用 OperatingSystem.Version 屬性來擷取作系統的版本號碼。

    // Get the operating system version.
    OperatingSystem os = Environment.OSVersion;
    Version ver = os.Version;
    Console.WriteLine($"Operating System: {os.VersionString} ({ver.ToString()})");
    
    // Get the operating system version.
    let os = Environment.OSVersion
    let ver = os.Version
    printfn $"Operating System: {os.VersionString} ({ver})"
    
    ' Get the operating system version.
    Dim os As OperatingSystem = Environment.OSVersion
    Dim ver As Version = os.Version
    Console.WriteLine("Operating System: {0} ({1})", os.VersionString, ver.ToString())
    
  • 擷取公用語言執行環境的版本。 下列範例會使用 Environment.Version 屬性來擷取 Common Language Runtime 的版本資訊。

    // Get the common language runtime version.
    Version ver = Environment.Version;
    Console.WriteLine($"CLR Version {ver.ToString()}");
    
    // Get the common language runtime version.
    let ver = Environment.Version
    printfn $"CLR Version {ver}"
    
    ' Get the common language runtime version.
    Dim ver As Version = Environment.Version
    Console.WriteLine("CLR Version {0}", ver.ToString())
    
  • 擷取目前應用程式的元件版本。 下列範例會使用 Assembly.GetEntryAssembly 方法來取得一個表示應用程式可執行檔的 Assembly 物件的參考,然後擷取其組件版本號碼。

    using System;
    using System.Reflection;
    
    public class Example4
    {
       public static void Main()
       {
          // Get the version of the executing assembly (that is, this assembly).
          Assembly assem = Assembly.GetEntryAssembly();
          AssemblyName assemName = assem.GetName();
          Version ver = assemName.Version;
          Console.WriteLine("Application {0}, Version {1}", assemName.Name, ver.ToString());
       }
    }
    
    open System.Reflection
    
    // Get the version of the executing assembly (that is, this assembly).
    let assem = Assembly.GetEntryAssembly()
    let assemName = assem.GetName()
    let ver = assemName.Version
    printfn $"Application {assemName.Name}, Version {ver}"
    
    Imports System.Reflection
    
    Module Example3
        Public Sub Main()
            ' Get the version of the executing assembly (that is, this assembly).
            Dim assem As Assembly = Assembly.GetEntryAssembly()
            Dim assemName As AssemblyName = assem.GetName()
            Dim ver As Version = assemName.Version
            Console.WriteLine("Application {0}, Version {1}", assemName.Name, ver.ToString())
        End Sub
    End Module
    
  • 擷取目前元件的元件版本。 下列範例會使用 Type.Assembly 屬性來取得 Assembly 物件的參考,該物件表示包含應用程式進入點的元件,並擷取其版本資訊。

    using System;
    using System.Reflection;
    
    public class Example3
    {
       public static void Main()
       {
          // Get the version of the current assembly.
          Assembly assem = typeof(Example).Assembly;
          AssemblyName assemName = assem.GetName();
          Version ver = assemName.Version;
          Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString());
       }
    }
    
    type Example = class end
    
    // Get the version of the current assembly.
    let assem = typeof<Example>.Assembly
    let assemName = assem.GetName()
    let ver = assemName.Version
    printfn $"{assemName.Name}, Version {ver}"
    
    Imports System.Reflection
    
    Module Example1
        Public Sub Main()
            ' Get the version of the current assembly.
            Dim assem As Assembly = GetType(Example).Assembly
            Dim assemName As AssemblyName = assem.GetName()
            Dim ver As Version = assemName.Version
            Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString())
        End Sub
    End Module
    
  • 取得特定組件的版本。 下列範例使用 Assembly.ReflectionOnlyLoadFrom 方法來取得具有特定檔名的 Assembly 對象參考,然後擷取其版本資訊。 請注意,其他數種方法也存在,以檔名或強名稱具現化 Assembly 物件。

    using System;
    using System.Reflection;
    
    public class Example5
    {
       public static void Main()
       {
          // Get the version of a specific assembly.
          string filename = @".\StringLibrary.dll";
          Assembly assem = Assembly.ReflectionOnlyLoadFrom(filename);
          AssemblyName assemName = assem.GetName();
          Version ver = assemName.Version;
          Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString());
       }
    }
    
    open System.Reflection
    
    // Get the version of a specific assembly.
    let filename = @".\StringLibrary.dll"
    let assem = Assembly.ReflectionOnlyLoadFrom filename
    let assemName = assem.GetName()
    let ver = assemName.Version
    printfn $"{assemName.Name}, Version {ver}"
    
    Imports System.Reflection
    
    Module Example4
        Public Sub Main()
            ' Get the version of a specific assembly.
            Dim filename As String = ".\StringLibrary.dll"
            Dim assem As Assembly = Assembly.ReflectionOnlyLoadFrom(filename)
            Dim assemName As AssemblyName = assem.GetName()
            Dim ver As Version = assemName.Version
            Console.WriteLine("{0}, Version {1}", assemName.Name, ver.ToString())
        End Sub
    End Module
    
  • 擷取 ClickOnce 應用程式的發行版本。 使用 ApplicationDeployment.CurrentVersion 屬性來顯示應用程式的發行版本的範例如下。 請注意,其成功執行需要設定範例的應用程式身分識別。 這是由Visual Studio發佈精靈自動處理。

    using System;
    using System.Deployment.Application;
    
    public class Example
    {
       public static void Main()
       {
          Version ver = ApplicationDeployment.CurrentDeployment.CurrentVersion;
          Console.WriteLine($"ClickOnce Publish Version: {ver}");
       }
    }
    
    Imports System.Deployment.Application
    
    Module Example0
        Public Sub Main()
            Dim ver As Version = ApplicationDeployment.CurrentDeployment.CurrentVersion
            Console.WriteLine("ClickOnce Publish Version: {0}", ver)
        End Sub
    End Module
    

    這很重要

    ClickOnce 部署之應用程式的發行版本與其元件版本完全無關。

比較版本物件

您可以使用 CompareTo 方法來判斷某個 Version 物件早於、相同或晚於第二 Version 個物件。 下列範例指出 2.1 版晚於 2.0 版。

Version v1 = new Version(2, 0);
Version v2 = new Version("2.1");
Console.Write("Version {0} is ", v1);
switch(v1.CompareTo(v2))
{
   case 0:
      Console.Write("the same as");
      break;
   case 1:
      Console.Write("later than");
      break;
   case -1:
      Console.Write("earlier than");
      break;
}
Console.WriteLine($" Version {v2}.");                  
// The example displays the following output:
//       Version 2.0 is earlier than Version 2.1.
open System

let v1 = Version(2, 0)
let v2 = Version "2.1"

printf $"Version {v1} is "

match v1.CompareTo v2 with
| 0 -> printf "the same as"
| 1 -> printf "later than"
| _ -> printf "earlier than"

printf $" Version {v2}."
// The example displays the following output:
//       Version 2.0 is earlier than Version 2.1.
Dim v1 As New Version(2,0)
Dim v2 As New Version("2.1")
Console.Write("Version {0} is ", v1)
Select Case v1.CompareTo(v2)
   Case 0
      Console.Write("the same as")
   Case 1
      Console.Write("later than")
   Case -1
      Console.Write("earlier than")
End Select
Console.WriteLine(" Version {0}.", v2)                  
' The example displays the following output:
'       Version 2.0 is earlier than Version 2.1.

若要讓兩個版本相等,第一個 Version 物件的主要、次要、組建和修訂編號必須與第二個 Version 物件的版本相同。 如果對象的組建或修訂編號 Version 未定義,該 Version 物件會被視為早於 Version 建置或修訂編號等於零的物件。 下列範例會藉由比較具有未定義版本元件的三 Version 個對象來說明這一點。

using System;

enum VersionTime {Earlier = -1, Same = 0, Later = 1 };

public class Example2
{
   public static void Main()
   {
      Version v1 = new Version(1, 1);
      Version v1a = new Version("1.1.0");
      ShowRelationship(v1, v1a);
      
      Version v1b = new Version(1, 1, 0, 0);
      ShowRelationship(v1b, v1a);
   }

   private static void ShowRelationship(Version v1, Version v2)
   {
      Console.WriteLine($"Relationship of {v1} to {v2}: {(VersionTime) v1.CompareTo(v2)}");       
   }
}
// The example displays the following output:
//       Relationship of 1.1 to 1.1.0: Earlier
//       Relationship of 1.1.0.0 to 1.1.0: Later
open System

type VersionTime =
    | Earlier = -1
    | Same = 0
    | Later = 1

let showRelationship (v1: Version) (v2: Version) =
    printfn $"Relationship of {v1} to {v2}: {v1.CompareTo v2 |> enum<VersionTime>}" 

let v1 = Version(1, 1)
let v1a = Version "1.1.0"
showRelationship v1 v1a

let v1b = Version(1, 1, 0, 0)
showRelationship v1b v1a

// The example displays the following output:
//       Relationship of 1.1 to 1.1.0: Earlier
//       Relationship of 1.1.0.0 to 1.1.0: Later
Public Enum VersionTime
   Earlier = -1
   Same = 0
   Later = 1
End Enum

Module Example2
    Public Sub Main()
        Dim v1 As New Version(1, 1)
        Dim v1a As New Version("1.1.0")
        ShowRelationship(v1, v1a)

        Dim v1b As New Version(1, 1, 0, 0)
        ShowRelationship(v1b, v1a)
    End Sub

    Private Sub ShowRelationship(v1 As Version, v2 As Version)
        Console.WriteLine("Relationship of {0} to {1}: {2}",
                        v1, v2, CType(v1.CompareTo(v2), VersionTime))
    End Sub
End Module
' The example displays the following output:
'       Relationship of 1.1 to 1.1.0: Earlier
'       Relationship of 1.1.0.0 to 1.1.0: Later