Поделиться через


Класс System.Version

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс Version представляет номер версии сборки, операционной системы или среды CLR. Номера версий состоят из двух до четырех компонентов: основной, дополнительный, сборка и редакция. Требуются основные и незначительные компоненты; Компоненты сборки и редакции являются необязательными, но компонент сборки является обязательным, если определен компонент редакции. Все определенные компоненты должны быть целыми числами, превышающими или равными 0. Формат номера версии выглядит следующим образом (необязательные компоненты отображаются в квадратных скобках):

основной.minor[.build[.редакция]]

Компоненты используются по соглашению следующим образом:

  • Основное: сборки с одинаковым именем, но разные основные версии не являются взаимозаменяемыми. Более высокий номер версии может указывать на основную перезапись продукта, в котором невозможно предположить обратную совместимость.

  • Дополнительный: если имя и основной номер версии в двух сборках одинаковы, но дополнительный номер версии отличается, это означает значительное улучшение с намерением обратной совместимости. Этот дополнительный номер версии может указывать на точку выпуска продукта или полностью совместимую с обратной версией продукта.

  • Сборка: разница в номере сборки представляет перекомпиляцию одного источника. Различные номера сборки могут использоваться при изменении процессора, платформы или компилятора.

  • Редакция: сборки с одинаковым именем, основными и дополнительными номерами версий, но различные редакции предназначены для полного взаимозаменяемых. Более высокий номер редакции может использоваться в сборке, которая исправляет отверстие безопасности в ранее выпущенной сборке.

Последующие версии сборки, отличающиеся только номерами сборки или редакции, считаются исправлениями предыдущей версии.

Важно!

Значение Version свойств, которые не были явно назначены значением, не определено (-1).

MinorRevision Свойства MajorRevision позволяют определить временную версию приложения, которая, например, исправляет проблему, пока вы не сможете освободить постоянное решение. Кроме того, операционная система Windows NT использует MajorRevision свойство для кодирования номера пакета обновления.

Назначение сведений о версии сборкам

Обычно Version класс не используется для назначения номера версии сборке. Вместо этого AssemblyVersionAttribute класс используется для определения версии сборки, как показано в примере в этой статье.

Получение сведений о версии

Version объекты чаще всего используются для хранения сведений о версиях некоторых компонентов системы или приложения (например, операционной системы), среды CLR, исполняемого файла текущего приложения или определенной сборки. В следующих примерах показаны некоторые из наиболее распространенных сценариев:

  • Получение версии операционной системы. В следующем примере свойство используется OperatingSystem.Version для получения номера версии операционной системы.

    // 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())
    
  • Получение версии среды CLR. В следующем примере свойство используется Environment.Version для получения сведений о версии среды CLR.

    // 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())
    
  • Получение текущей версии сборки приложения. В следующем примере метод используется 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: {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
    

    Важно!

    Версия публикации приложения для развертывания 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 {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.

Для двух версий должно быть равным, основное, дополнительное, сборка и номера редакции первого объекта должны совпадать с номерами 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 {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