System.Version, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Klasa Version reprezentuje numer wersji zestawu, systemu operacyjnego lub środowiska uruchomieniowego języka wspólnego. Numery wersji składają się z dwóch do czterech składników: głównych, pomocniczych, kompilacji i wersji. Wymagane są główne i pomocnicze składniki; składniki kompilacji i poprawek są opcjonalne, ale składnik kompilacji jest wymagany, jeśli składnik poprawki jest zdefiniowany. Wszystkie zdefiniowane składniki muszą być liczbami całkowitymi większymi lub równymi 0. Format numeru wersji jest następujący (opcjonalne składniki są wyświetlane w nawiasach kwadratowych):

główne.drobne[.build[.poprawka]]

Składniki są używane przez konwencję w następujący sposób:

  • Główna: Zestawy o tej samej nazwie, ale różne wersje główne nie są wymienne. Wyższy numer wersji może wskazywać na główne ponowne zapisywanie produktu, w którym nie można założyć zgodności z poprzednimi wersjami.

  • Pomocnicza: jeśli nazwa i numer wersji głównej w dwóch zestawach są takie same, ale numer wersji pomocniczej jest inny, oznacza to znaczne ulepszenie z zamiarem zgodności z poprzednimi wersjami. Ten wyższy numer wersji pomocniczej może wskazywać na wydanie produktu lub w pełni zgodną z poprzednimi wersjami produktu.

  • Kompilacja: różnica w numerze kompilacji reprezentuje ponowną kompilację tego samego źródła. Różne numery kompilacji mogą być używane w przypadku zmiany procesora, platformy lub kompilatora.

  • Poprawka: Zestawy o tej samej nazwie, głównej i pomocniczej wersji, ale różne poprawki mają być w pełni wymienne. Wyższy numer poprawki może być używany w kompilacji, która naprawia dziurę zabezpieczeń w wcześniej wydanym zestawie.

Kolejne wersje zestawu, które różnią się tylko numerami kompilacji lub poprawek, są uważane za aktualizacje poprawek poprzedniej wersji.

Ważne

Wartość Version właściwości, które nie zostały jawnie przypisane, jest niezdefiniowana (-1).

Właściwości MajorRevision i MinorRevision umożliwiają zidentyfikowanie tymczasowej wersji aplikacji, która na przykład usuwa problem, dopóki nie będzie można zwolnić trwałego rozwiązania. Ponadto system operacyjny Windows NT używa MajorRevision właściwości do kodowania numeru dodatku Service Pack.

Przypisywanie informacji o wersji do zestawów

Zazwyczaj Version klasa nie jest używana do przypisywania numeru wersji do zestawu. AssemblyVersionAttribute Zamiast tego klasa służy do definiowania wersji zestawu, jak pokazano w przykładzie w tym artykule.

Pobieranie informacji o wersji

Version obiekty są najczęściej używane do przechowywania informacji o wersji niektórych składników systemu lub aplikacji (takich jak system operacyjny), środowiska uruchomieniowego języka wspólnego, pliku wykonywalnego bieżącej aplikacji lub określonego zestawu. W poniższych przykładach przedstawiono niektóre z najbardziej typowych scenariuszy:

  • Pobieranie wersji systemu operacyjnego. W poniższym przykładzie użyto OperatingSystem.Version właściwości w celu pobrania numeru wersji systemu operacyjnego.

    // Get the operating system version.
    OperatingSystem os = Environment.OSVersion;
    Version ver = os.Version;
    Console.WriteLine("Operating System: {0} ({1})", 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())
    
  • Pobieranie wersji środowiska uruchomieniowego języka wspólnego. W poniższym przykładzie użyto Environment.Version właściwości do pobrania informacji o wersji środowiska uruchomieniowego języka wspólnego.

    // Get the common language runtime version.
    Version ver = Environment.Version;
    Console.WriteLine("CLR Version {0}", 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())
    
  • Pobieranie wersji zestawu bieżącej aplikacji. W poniższym przykładzie użyto Assembly.GetEntryAssembly metody w celu uzyskania odwołania do obiektu reprezentującego Assembly plik wykonywalny aplikacji, a następnie pobiera numer wersji zestawu.

    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
    
  • Pobieranie wersji zestawu bieżącego zestawu. W poniższym przykładzie użyto Type.Assembly właściwości w celu uzyskania odwołania do obiektu reprezentującego Assembly zestaw zawierający punkt wejścia aplikacji, a następnie pobiera informacje o wersji.

    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
    
  • Pobieranie wersji określonego zestawu. W poniższym przykładzie Assembly.ReflectionOnlyLoadFrom użyto metody w celu uzyskania odwołania do Assembly obiektu, który ma określoną nazwę pliku, a następnie pobiera informacje o wersji. Należy pamiętać, że istnieje również kilka innych metod tworzenia Assembly wystąpienia obiektu według nazwy pliku lub silnej nazwy.

    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
    
  • Pobieranie wersji publikowania aplikacji ClickOnce. W poniższym przykładzie użyto ApplicationDeployment.CurrentVersion właściwości do wyświetlenia wersji publikowania aplikacji. Należy pamiętać, że pomyślne wykonanie wymaga ustawienia tożsamości aplikacji przykładu. Jest to obsługiwane automatycznie przez Kreatora publikowania programu 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: {0}", 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
    

    Ważne

    Wersja publikowania aplikacji dla wdrożenia technologii ClickOnce jest całkowicie niezależna od wersji zestawu.

Porównywanie obiektów wersji

Można użyć CompareTo metody , aby określić, czy jeden Version obiekt jest wcześniejszy niż, taki sam, jak lub nowszy niż drugi Version obiekt. Poniższy przykład wskazuje, że wersja 2.1 jest nowsza niż wersja 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 {0}.", 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.

Aby dwie wersje były równe, główne, pomocnicze, kompilacje i numery poprawek pierwszego Version obiektu muszą być identyczne z numerami drugiego Version obiektu. Jeśli numer kompilacji lub poprawki Version obiektu jest niezdefiniowany, ten Version obiekt jest uznawany za wcześniejszy niż Version obiekt, którego numer kompilacji lub poprawki jest równy zero. Poniższy przykład ilustruje to, porównując trzy Version obiekty, które mają niezdefiniowane składniki wersji.

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 {0} to {1}: {2}", 
                        v1, 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