DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

自分自身のバージョン情報を取得する

FileVersionInfo.GetVersionInfoで取得する

自分自身のバージョン情報を取得するには、「ファイルのバージョン情報を取得する」と「自分のアプリケーションの実行ファイルのパスを取得する」の方法を使えばできるでしょう。つまり、自分自身のファイルのパスを取得し、これを使ってバージョン情報を取得します。

VB.NET
コードを隠すコードを選択
'自分自身のバージョン情報を取得する
Dim ver As System.Diagnostics.FileVersionInfo = _
    System.Diagnostics.FileVersionInfo.GetVersionInfo( _
    System.Reflection.Assembly.GetExecutingAssembly().Location)
'結果を表示
Console.WriteLine(ver)
C#
コードを隠すコードを選択
//自分自身のバージョン情報を取得する
System.Diagnostics.FileVersionInfo ver =
    System.Diagnostics.FileVersionInfo.GetVersionInfo(
    System.Reflection.Assembly.GetExecutingAssembly().Location);
//結果を表示
Console.WriteLine(ver);

グローバル属性の情報を取得する

グローバル属性(Visual Studioでは、AssemblyInfo.csやAssemblyInfo.vbファイル内に記述されている)として与えられているアセンブリマニフェストに含まれているアセンブリのタイトル(AssemblyTitle)、説明(AssemblyDescription)、会社名(AssemblyCompany)、製品名(AssemblyProduct)、著作権(AssemblyCopyright)、商標(AssemblyTrademark)などの情報を取得するには、次のようにします。

VB.NET
コードを隠すコードを選択
'AssemblyTitleの取得
Dim asmttl As System.Reflection.AssemblyTitleAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyTitleAttribute)), _
            System.Reflection.AssemblyTitleAttribute)
Console.WriteLine(asmttl.Title)

'AssemblyDescriptionの取得
Dim asmdc As System.Reflection.AssemblyDescriptionAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyDescriptionAttribute)), _
            System.Reflection.AssemblyDescriptionAttribute)
Console.WriteLine(asmdc.Description)

'AssemblyCompanyの取得
Dim asmcmp As System.Reflection.AssemblyCompanyAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyCompanyAttribute)), _
            System.Reflection.AssemblyCompanyAttribute)
Console.WriteLine(asmcmp.Company)

'AssemblyProductの取得
Dim asmprd As System.Reflection.AssemblyProductAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyProductAttribute)), _
            System.Reflection.AssemblyProductAttribute)
Console.WriteLine(asmprd.Product)

'AssemblyCopyrightの取得
Dim asmcpy As System.Reflection.AssemblyCopyrightAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyCopyrightAttribute)), _
            System.Reflection.AssemblyCopyrightAttribute)
Console.WriteLine(asmcpy.Copyright)

'AssemblyTrademarkの取得
Dim asmtmk As System.Reflection.AssemblyTrademarkAttribute = _
    CType(Attribute.GetCustomAttribute( _
        System.Reflection.Assembly.GetExecutingAssembly(), _
        GetType(System.Reflection.AssemblyTrademarkAttribute)), _
            System.Reflection.AssemblyTrademarkAttribute)
Console.WriteLine(asmtmk.Trademark)
C#
コードを隠すコードを選択
//AssemblyTitleの取得
System.Reflection.AssemblyTitleAttribute asmttl = 
    (System.Reflection.AssemblyTitleAttribute)
    Attribute.GetCustomAttribute(
        System.Reflection.Assembly.GetExecutingAssembly(), 
        typeof(System.Reflection.AssemblyTitleAttribute));
Console.WriteLine(asmttl.Title);

//AssemblyDescriptionの取得
System.Reflection.AssemblyDescriptionAttribute asmdc = 
    (System.Reflection.AssemblyDescriptionAttribute)
    Attribute.GetCustomAttribute(
    System.Reflection.Assembly.GetExecutingAssembly(), 
    typeof(System.Reflection.AssemblyDescriptionAttribute));
Console.WriteLine(asmdc.Description);

//AssemblyCompanyの取得
System.Reflection.AssemblyCompanyAttribute asmcmp = 
    (System.Reflection.AssemblyCompanyAttribute)
    Attribute.GetCustomAttribute(
    System.Reflection.Assembly.GetExecutingAssembly(), 
    typeof(System.Reflection.AssemblyCompanyAttribute));
Console.WriteLine(asmcmp.Company);

//AssemblyProductの取得
System.Reflection.AssemblyProductAttribute asmprd = 
    (System.Reflection.AssemblyProductAttribute)
    Attribute.GetCustomAttribute(
    System.Reflection.Assembly.GetExecutingAssembly(), 
    typeof(System.Reflection.AssemblyProductAttribute));
Console.WriteLine(asmprd.Product);

//AssemblyCopyrightの取得
System.Reflection.AssemblyCopyrightAttribute asmcpy = 
    (System.Reflection.AssemblyCopyrightAttribute)
    Attribute.GetCustomAttribute(
    System.Reflection.Assembly.GetExecutingAssembly(), 
    typeof(System.Reflection.AssemblyCopyrightAttribute));
Console.WriteLine(asmcpy.Copyright);

//AssemblyTrademarkの取得
System.Reflection.AssemblyTrademarkAttribute asmtmk = 
    (System.Reflection.AssemblyTrademarkAttribute)
    Attribute.GetCustomAttribute(
    System.Reflection.Assembly.GetExecutingAssembly(), 
    typeof(System.Reflection.AssemblyTrademarkAttribute));
Console.WriteLine(asmtmk.Trademark);

GetCustomAttributeメソッドは、指定された属性が見つからなかった時は、null(VB.NETではNothing)を返します。

AssemblyName.Versionから取得する

上記の方法で取得できる

AssemblyProductAttribute属性に設定されたアセンブリのメジャー番号、マイナ番号、リビジョン番号、ビルド番号は、次のような方法で取得できます。

VB.NET
コードを隠すコードを選択
'自分自身のAssemblyを取得
Dim asm As System.Reflection.Assembly = _
    System.Reflection.Assembly.GetExecutingAssembly()
'バージョンの取得
Dim ver As System.Version = asm.GetName().Version
'結果の表示
Console.WriteLine(ver)
C#
コードを隠すコードを選択
//自分自身のAssemblyを取得
System.Reflection.Assembly asm = 
    System.Reflection.Assembly.GetExecutingAssembly();
//バージョンの取得
System.Version ver = asm.GetName().Version;
//結果の表示
Console.WriteLine(ver);

はじめに紹介したFileVersionInfo.GetVersionInfoメソッドを使った方法で取得できるファイルバージョン(FileVersion)や製品バージョン(ProductVersion)はAssemblyFileVersionAttributeに設定されたバージョンであり、AssemblyName.Versionで取得できるバージョンはAssemblyProductAttributeに設定されたバージョンです。(AssemblyFileVersionAttributeが設定されていない場合は、同じになるようです。)

.NET Framework 2.0以降のVB.NETで、My.Application.Infoから取得する

.NET Framework 2.0以降のVB.NETでは、My.Application.Infoプロパティにより、アプリケーションのさまざまな情報を簡単に取得できます。以下にその使用例を示します。

VB.NET
コードを隠すコードを選択
'アセンブリファイルの名前(拡張子なし)
'AssemblyName.Nameと同じ
Console.WriteLine(My.Application.Info.AssemblyName)
'会社名
'AssemblyCompanyAttribute.Companyと同じ
Console.WriteLine(My.Application.Info.CompanyName)
'著作権
'AssemblyCopyrightAttribute.Copyrightと同じ
Console.WriteLine(My.Application.Info.Copyright)
'説明
'AssemblyDescriptionAttribute.Descriptionと同じ
Console.WriteLine(My.Application.Info.Description)
'格納されているディレクトリ
'Assembly.Locationのディレクトリ部分と同じ
Console.WriteLine(My.Application.Info.DirectoryPath)
'読み込まれたすべてのアセンブリの数
'AppDomain.CurrentDomain.GetAssembliesと同じ
Console.WriteLine(My.Application.Info.LoadedAssemblies.Count)
'製品名
'AssemblyProductAttribute.Productと同じ
Console.WriteLine(My.Application.Info.ProductName)
'現在のスタック トレース情報
'Environment.StackTraceと同じ
Console.WriteLine(My.Application.Info.StackTrace)
'タイトル
'AssemblyTitleAttribute.Titleと同じ
Console.WriteLine(My.Application.Info.Title)
'商標
'AssemblyTrademarkAttribute.Trademarkと同じ
Console.WriteLine(My.Application.Info.Trademark)
'バージョン番号
'AssemblyName.Versionと同じ
Console.WriteLine(My.Application.Info.Version)
'プロセスのコンテキストに割り当てられた物理メモリの量
'Environment.WorkingSetと同じ
Console.WriteLine(My.Application.Info.WorkingSet)
  • 履歴:
  • 2006/11/26 FileVersionInfo.GetVersionInfoとAssemblyName.Versionの違いを追加。(コメントでご指摘をいただきました。)
  • 2007/2/7 My.Application.Infoを使用した方法を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。