System.Version クラス

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このクラスは Version 、アセンブリ、オペレーティング システム、または共通言語ランタイムのバージョン番号を表します。 バージョン番号は、メジャー、マイナー、ビルド、リビジョンの 2 から 4 つのコンポーネントで構成されます。 主要コンポーネントとマイナー コンポーネントが必要です。ビルド コンポーネントとリビジョン コンポーネントは省略可能ですが、リビジョン コンポーネントが定義されている場合はビルド コンポーネントが必要です。 定義されているすべてのコンポーネントは、0 以上の整数である必要があります。 バージョン番号の形式は次のとおりです (省略可能なコンポーネントは角かっこで囲まれています)。

majorminor[.build[.revision]]

コンポーネントは、規則によって次のように使用されます。

  • メジャー: 同じ名前でメジャー バージョンが異なるアセンブリは交換できません。 バージョン番号が大きいほど、下位互換性を想定できない製品の大幅な書き換えを示している可能性があります。

  • マイナー: 2 つのアセンブリの名前とメジャー バージョン番号が同じであるが、マイナー バージョン番号が異なる場合、下位互換性を意図した大幅な機能強化を示します。 このマイナー バージョン番号が大きいほど、製品のポイント リリースまたは完全に下位互換性のある製品の新しいバージョンを示している可能性があります。

  • ビルド: ビルド番号の違いは、同じソースの再コンパイルを表します。 プロセッサ、プラットフォーム、またはコンパイラが変更されたときに、異なるビルド番号が使用される場合があります。

  • リビジョン: 同じ名前、メジャー、およびマイナー バージョン番号を持つアセンブリですが、異なるリビジョンは完全に交換可能であることを意図しています。 以前にリリースされたアセンブリのセキュリティ ホールを修正するビルドでは、より大きなリビジョン番号が使用される場合があります。

ビルド番号またはリビジョン番号によってのみ異なるアセンブリの後続のバージョンは、以前のバージョンの修正プログラムの更新プログラムと見なされます。

重要

値が明示的に割り当てられていないプロパティの Version 値は未定義です (-1)。

プロパティ MajorRevisionMinorRevision 使用すると、永続的なソリューションを解放できるようになるまで、たとえば問題を修正するアプリケーションの一時的なバージョンを特定できます。 さらに、Windows NT オペレーティング システムは、プロパティを MajorRevision 使用してサービス パック番号をエンコードします。

アセンブリにバージョン情報を割り当てる

通常、 Version クラスはアセンブリにバージョン番号を割り当てるためには使用されません。 代わりに、この記事の AssemblyVersionAttribute 例に示すように、クラスを使用してアセンブリのバージョンを定義します。

バージョン情報を取得する

Version オブジェクトは、一部のシステムまたはアプリケーション コンポーネント (オペレーティング システムなど)、共通言語ランタイム、現在のアプリケーションの実行可能ファイル、または特定のアセンブリに関するバージョン情報を格納するために最もよく使用されます。 次の例は、最も一般的なシナリオの一部を示しています。

  • オペレーティング システムのバージョンを取得しています。 次の例では、プロパティを 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())
    
  • 共通言語ランタイムのバージョンの取得。 次の例では、プロパティを Environment.Version 使用して共通言語ランタイムに関するバージョン情報を取得します。

    // 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 使用してアプリケーションの発行バージョンを表示します。 正常に実行するには、例のアプリケーション ID を設定する必要があることに注意してください。 これは、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 使用すると、1 つのオブジェクトが 2 番目 Version のオブジェクトよりも前か、同じか、または 2 番目 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.

2 つのバージョンが等しい場合、最初 Version のオブジェクトのメジャー、マイナー、ビルド、およびリビジョン番号は、2 番目 Version のオブジェクトの番号と同じである必要があります。 オブジェクトのビルド番号またはリビジョン番号 Version が定義されていない場合、その Version オブジェクトは、ビルドまたはリビジョン番号が 0 のオブジェクトよりも Version 前にあると見なされます。 次の例では、未定義のバージョン コンポーネントを持つ 3 つの 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