.NETにおけるバージョン情報の種類、またそれらを設定する方法、取得する方法について。
バージョン情報に関するアセンブリ属性・プロジェクトプロパティ
.NETにおけるバージョン情報は以下に挙げるようにいくつかの種類があり、それぞれ意味や役割、設定できる値が異なっている。
アセンブリにバージョン情報を埋め込むための属性と、対応するプロジェクトファイルのプロパティ、またその意味と役割は次のとおり。
アセンブリ属性 | プロジェクトプロパティの要素 | 意味・役割 |
---|---|---|
AssemblyVersion | <AssemblyVersion> |
アセンブリのバージョン。 構成ファイルを使ったバージョン指定や、アセンブリがGACで管理される場合に使用される値。major.minor.build.revision の形式でバージョンを指定する。buildとrevisionにはワイルドカード * を指定することができ、コンパイラに自動的に値を決定させることもできる。 ただし、.NET/.NET Coreで自動的に決定させたい場合は、<Deterministic>をfalseを指定して決定論的ビルドを無効にする必要がある。 (§.決定論的ビルド (<Deterministic>))例: 1.0.0.0 , 1.0.* , 1.0.0.* , 1.0.*.* |
AssemblyFileVersion | <FileVersion> |
ファイルのバージョン。 Win32 EXE/DLLとしてのバージョン。 ファイルのプロパティダイアログに表示される[ファイルバージョン]の値を指定したい場合はこの値を設定する。major.minor.build.revision の形式でバージョンを指定する。 |
AssemblyInformationalVersion | <InformationalVersion> |
追加的なバージョン情報。 ユーザー向けに提示されるバージョン情報などを指定する。 ファイルのプロパティダイアログに表示される[製品バージョン]の値を指定したい場合はこの値を設定する。 特に形式は定められていないため、単にバージョンだけでなく、製品コードネームや対象プラットフォームなどヒューマンフレンドリな情報を付加することができる。 例: 1.0 beta1 'codename:Foo' (win64) |
(該当なし) | <PackageVersion> |
NuGetパッケージのバージョン。 アセンブリに埋め込まれるバージョン情報ではなく、NuGetパッケージとしてリリースする際に使用されるバージョンとして使用される。major.minor.patch , major.minor.patch-prerelease , major.minor.patch+build など、Semantic versioning 2.0.0の仕様に準拠する形式でバージョンを指定する。 (詳細:NuGet パッケージ バージョンのリファレンス | Microsoft Docs)例: 1.0.0 ,1.0.0-beta1 ,1.0.0+win64-githash |
(該当なし) | <Version> | 上記のプロパティの指定を省略した場合、このプロパティで指定された値が規定値として使用される。 逆にいえば、このプロパティに指定した値は、上記のプロパティで個別に上書きすることができる。major.minor.build.revision の形式でバージョンを指定する。 ワイルドカード* は指定できない。 |
アセンブリ属性 | プロジェクトプロパティの要素 | 意味・役割 |
Windowsのプロパティダイアログでは、「ファイルバージョン」欄でFileVersion、「製品バージョン」欄でInformationalVersionに設定されている値が表示される。

バージョン情報の設定方法
アセンブリにバージョン情報を含むメタデータを設定する方法について。 ここでは個々のIDE上での設定方法については扱わない。
プロジェクトファイルでの設定
.NET/.NET Core形式のプロジェクトファイル(*.csproj
, *.vbproj
など)では、プロジェクトのプロパティ(PropertyGroup
)としてバージョン情報を記述することで埋め込むことができる。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Library</OutputType>
<AssemblyVersion>1.2</AssemblyVersion>
<AssemblyFileVersion>4.3.2.1</AssemblyFileVersion>
︙
︙
</PropertyGroup>
</Project>
ソースファイルに属性として記述する方法をとることもできるが、各バージョン情報はプロジェクトファイルまたはソースファイルのどちらか一方のみに記述でき、重複する場合はコンパイルエラーとなる。 (§.AssemblyInfoファイルの自動生成 (<GenerateAssemblyInfo>)、§.自動生成されるアセンブリ属性の個別制御 (<Generate***Attribute>))
AssemblyInfoファイルでの設定
.NET Frameworkでは、AssemblyInfo.cs
/AssemblyInfo.vb
などのソースファイルにアセンブリ属性としてバージョン情報を記述することで埋め込むことができる。
ファイル名は任意だが、一般的にはファイル名をAssemblyInfo
とし、ここにすべてのアセンブリ属性を記述する。
using System.Reflection;
[assembly: AssemblyVersion("1.2.*")]
[assembly: AssemblyFileVersion("4.3.2.1")]
︙
︙
Imports System.Reflection
<Assembly: AssemblyVersion("1.2.*")>
<Assembly: AssemblyFileVersion("4.3.2.1")>
︙
︙
.NET/.NET Coreにてソースファイルにアセンブリ属性として埋め込む場合は、自動生成されるAssemblyInfoファイルと重複しないようにする必要がある。 (§.AssemblyInfoファイルの自動生成 (<GenerateAssemblyInfo>)、§.自動生成されるアセンブリ属性の個別制御 (<Generate***Attribute>))
バージョン情報の設定に関連するプロジェクト設定
AssemblyInfoファイルの自動生成 (<GenerateAssemblyInfo>)
.NET/.NET Core形式のプロジェクトファイルで<GenerateAssemblyInfo>の指定を省略した場合は、既定値としてtrue
(AssemblyInfoファイルの自動生成が有効)となる。
AssemblyInfoファイルの自動生成が有効な場合、プロジェクトファイルで設定されているアセンブリ情報がアセンブリ属性に展開され、ソースファイルとして自動生成される。 この状態でプロジェクトファイルとソースファイルの両方で同一のバージョン情報を指定しようとすると、アセンブリ属性の重複が起こることになり、次のようにビルドエラーとなる。
obj/Debug/net5.0/TestApplication.AssemblyInfo.cs(16,12): error CS0579: System.Reflection.AssemblyInformationalVersionAttribute' 属性が重複しています。 [/home/smdn/assemblyversion/TestApplication.csproj] obj/Debug/net5.0/TestApplication.AssemblyInfo.cs(19,12): error CS0579: System.Reflection.AssemblyVersionAttribute' 属性が重複しています。 [/home/smdn/assemblyversion/TestApplication.csproj] ビルドに失敗しました。
バージョン情報に限らず、<Title>や<Description>などのアセンブリ情報がプロジェクトファイルとソースファイルの両方で重複する場合も同様にビルドエラーとなる。
自動生成されるアセンブリ属性の個別制御 (<Generate***Attribute>)
AssemblyInfoファイルの自動生成では、自動生成の対象となるプロパティ/アセンブリ属性を個別に制御することもできる。 例えばAssemblyFileVersionAttribute
の場合は<GenerateAssemblyFileVersionAttribute>のように、<Generate***Attribute>プロパティを指定することにより、対応する属性の自動生成を有効にするか否かを個別に指定することができる。
これを用いることで、プロジェクトファイルとAssemblyInfoファイルの両方でアセンブリ情報を設定することもできる。 ただし、これにより重複が起こる場合は当然ビルドエラーとなる。
using System.Reflection;
// AssemblyFileVersionとAssemblyInformationalVersionをソースファイル(アセンブリ属性)で設定する
[assembly: AssemblyFileVersion("4.3.2.1")]
[assembly: AssemblyInformationalVersion("1.0 beta")]
︙
︙
Imports System.Reflection
' AssemblyFileVersionとAssemblyInformationalVersionをソースファイル(アセンブリ属性)で設定する
<Assembly: AssemblyFileVersion("4.3.2.1")>
<Assembly: AssemblyInformationalVersion("1.0 beta")>
︙
︙
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Exe</OutputType>
<!-- AssemblyInfoファイルの自動生成を有効にする -->
<GenerateAssemblyInfo>true</GenerateAssemblyInfo>
<!-- AssemblyVersionをプロジェクトプロパティで設定する -->
<AssemblyVersion>1.2</AssemblyVersion>
<!-- AssemblyFileVersionとAssemblyInformationalVersionを -->
<!-- ソースファイルで設定するため、自動生成を個別に無効化する -->
<GenerateAssemblyFileVersionAttribute>false</GenerateAssemblyFileVersionAttribute>
<GenerateAssemblyInformationalVersionAttribute>false</GenerateAssemblyInformationalVersionAttribute>
</PropertyGroup>
</Project>
このプロパティはAssemblyTitleAttribute
やAssemblyDescriptionAttribute
などのアセンブリ属性に対しても同様に適用できる。
決定論的ビルド (<Deterministic>)
.NET/.NET Core形式のプロジェクトファイルで<Deterministic>の指定を省略した場合は、既定値としてtrue
(決定論的ビルドが有効)となる。 この状態でAssemblyVersionにワイルドカード*
を含めて自動決定させると、次のようにビルドエラーとなる。
obj/Debug/net5.0/TestApplication.AssemblyInfo.cs(19,55): error CS8357: 指定されたバージョン文字列には、決定性と互換性のないワイルドカードが含まれています。バージョン文字列からワイルドカードを削除するか、このコンパイルの決定性を無効にしてください。 [/home/smdn/assemblyversion/TestApplication.csproj] ビルドに失敗しました。
バージョン情報の取得方法
コード上からアセンブリのバージョン情報を取得する方法は、取得したいバージョン情報の種類によっていくつか方法がある。 それぞれ次のメソッド・プロパティで取得することができる。
取得したいバージョン情報 | 取得できるメソッド・プロパティ |
---|---|
AssebmlyVersion |
AssemblyName.Version
FileVersionInfo.GetVersionInfo (Windows以外) |
FileVersion |
Attribute.GetCustomAttribute
FileVersionInfo.GetVersionInfo (Windows上でのみ) Application.ProductVersion (.NET Frameworkのみ) |
InformationalVersion |
Attribute.GetCustomAttribute
Application.ProductVersion |
上記のように実行環境・ランタイムの種類によって取得される値が変わるものもある。 AssebmlyVersionならAssemblyName.Version、FileVersion・InformationalVersionならAttribute.GetCustomAttributeが確実かつ環境依存無しで取得できる方法となる。
AssemblyName.Version
AssemblyName.Versionプロパティからは、アセンブリバージョン(AssemblyVersion)を取得することができる。
Assembly.GetNameメソッドを使ってバージョン情報を取得したいアセンブリのAssemblyNameを取得し、AssemblyName.Versionプロパティを参照すればアセンブリのバージョン情報を取得できる。 このプロパティでは、バージョン情報をVersionクラスで取得することができる。
using System;
using System.Reflection;
class Sample {
static void Main()
{
// 現在実行しているアセンブリ(.exeのアセンブリ)を取得する
var assm = Assembly.GetExecutingAssembly();
// AssemblyNameを取得する
var name = assm.GetName();
// 名前とバージョンを取得して表示する
Console.WriteLine("{0} {1}", name.Name, name.Version);
}
}
using System.Reflection;
[assembly: AssemblyVersion("1.2.*")] // AssemblyName.Versionではこの値が取得される
Imports System
Imports System.Reflection
Class Sample
Shared Sub Main()
' 現在実行しているアセンブリ(.exeのアセンブリ)を取得する
Dim assm As [Assembly] = [Assembly].GetExecutingAssembly()
' AssemblyNameを取得する
Dim name As AssemblyName = assm.GetName()
' 名前とバージョンを取得して表示する
Console.WriteLine("{0} {1}", name.Name, name.Version)
End Sub
End Class
Imports System.Reflection
<Assembly: AssemblyVersion("1.2.*")> ' AssemblyName.Versionではこの値が取得される
E:\>csc /out:TestApplication.exe AssemblyInfo.cs test.cs & TestApplication.exe
TestApplication 1.2.4834.43060
$mcs -out:TestApplication.exe AssemblyInfo.cs test.cs && mono TestApplication.exe
TestApplication 1.2.4834.42292
AssemblyVersion属性でアスタリスクを使ってバージョンを指定した場合は、ビルド時の時間を元に自動的に決定される。
AssemblyVersionをAssemblyInfoではなくプロジェクトファイルで指定した場合。 (取得用のコードは上記と同じ)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Exe</OutputType>
<!-- AssemblyName.Versionでは以下の値が取得される -->
<AssemblyVersion>1.2.*</AssemblyVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
</Project>
>dotnet run
TestApplication 1.2.7400.5273
AssemblyVersionプロパティでアスタリスクを使ってバージョンを指定した場合は、ビルド時の時間を元に自動的に決定される。 バージョンを自動的に決定する場合は、決定論的ビルド(Deterministic)を無効にする必要がある。
Attribute.GetCustomAttribute
Attribute.GetCustomAttributeメソッドを使ってアセンブリ属性を取得することで、追加的なバージョン情報(InformationalVersion)とアセンブリのファイルバージョン(FileVersion)を取得することができる。 アセンブリバージョン(AssemblyVersion)は属性自体の取得ができないため、このメソッドでは取得できない。
using System;
using System.Reflection;
class Sample {
static void Main()
{
// 現在実行しているアセンブリ(.exeのアセンブリ)を取得する
var assm = Assembly.GetExecutingAssembly();
// AssemblyVersion属性の値を取得しようとする (実際には取得できない)
Console.WriteLine("AssemblyVersion: {0}", assm.GetCustomAttribute<AssemblyVersionAttribute>()?.Version);
// AssemblyFileVersion属性の値を取得する
Console.WriteLine("AssemblyFileVersion: {0}", assm.GetCustomAttribute<AssemblyFileVersionAttribute>()?.Version);
// AssemblyInformationalVersion属性の値を取得する
Console.WriteLine("AssemblyInformationalVersion: {0}", assm.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion);
}
}
using System.Reflection;
[assembly: AssemblyVersion("1.2.*")]
[assembly: AssemblyFileVersion("4.3.2.1")]
[assembly: AssemblyInformationalVersion("9.9.9.9")]
Imports System
Imports System.Reflection
Class Sample
Shared Sub Main()
' 現在実行しているアセンブリ(.exeのアセンブリ)を取得する
Dim assm As [Assembly] = [Assembly].GetExecutingAssembly()
' AssemblyVersion属性の値を取得しようとする (実際には取得できない)
Console.WriteLine("AssemblyVersion: {0}", assm.GetCustomAttribute(Of AssemblyVersionAttribute)?.Version)
' AssemblyFileVersion属性の値を取得する
Console.WriteLine("AssemblyFileVersion: {0}", assm.GetCustomAttribute(Of AssemblyFileVersionAttribute)?.Version)
' AssemblyInformationalVersion属性の値を取得する
Console.WriteLine("AssemblyInformationalVersion: {0}", assm.GetCustomAttribute(Of AssemblyInformationalVersionAttribute)?.InformationalVersion)
End Sub
End Class
Imports System.Reflection
<Assembly: AssemblyVersion("1.2.*")>
<Assembly: AssemblyFileVersion("4.3.2.1")>
<Assembly: AssemblyInformationalVersion("9.9.9.9")>
E:\>csc AssemblyInfo.cs test.cs /out:TestApplication.exe & TestApplication.exe
AssemblyVersion:
AssemblyFileVersion: 4.3.2.1
AssemblyInformationalVersion: 9.9.9.9
$mcs AssemblyInfo.cs test.cs -out:TestApplication.exe && mono TestApplication.exe
AssemblyVersion:
AssemblyFileVersion: 4.3.2.1
AssemblyInformationalVersion: 9.9.9.9
AssemblyVersionをAssemblyInfoではなくプロジェクトファイルで指定した場合。 (取得用のコードは上記と同じ)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Exe</OutputType>
<AssemblyVersion>1.2.*</AssemblyVersion>
<FileVersion>4.3.2.1</FileVersion>
<InformationalVersion>9.9.9.9</InformationalVersion>
<Deterministic>false</Deterministic>
</PropertyGroup>
</Project>
>dotnet run
AssemblyVersion:
AssemblyFileVersion: 4.3.2.1
AssemblyInformationalVersion: 9.9.9.9
FileVersionInfo.GetVersionInfo
FileVersionInfo.GetVersionInfoメソッドからは、アセンブリのファイルバージョン(FileVersion)を取得することができる。 ただし、ファイルバージョンが取得できるのはWindows上で実行した場合のみで、Windows以外ではアセンブリバージョン(AssebmlyVersion)が返される。
FileVersionInfo.GetVersionInfoメソッドにアセンブリ自身のファイルパスを指定してファイルのバージョン情報を表すFileVersionInfoを取得し、FileVersionInfo.FileVersionプロパティを参照すればアセンブリのファイルバージョンを取得できる。 なお、このプロパティから取得できるバージョン情報は、Versionクラスではなく文字列型になっている点に注意。
FileVersionInfo.GetVersionInfoメソッドに渡すアセンブリのファイルパスは、Assembly.Locationプロパティを参照して取得できる。
using System;
using System.Diagnostics;
using System.Reflection;
class Sample {
static void Main()
{
// 現在実行しているアセンブリ(.exeのアセンブリ情報)を取得する
var assm = Assembly.GetExecutingAssembly();
// アセンブリのファイルパスを取得する
var path = assm.Location;
// アセンブリのFileVersionInfoを取得する
var versionInfo = FileVersionInfo.GetVersionInfo(path);
// ファイル名とバージョンを取得して表示する
Console.WriteLine("{0} {1}", versionInfo.FileName, versionInfo.FileVersion);
}
}
using System.Reflection;
// FileVersionInfo.GetVersionInfoでは以下どちらかの値が取得される
[assembly: AssemblyFileVersion("4.3.2.1")] // Windows上またはMonoではこの値が取得される
[assembly: AssemblyVersion("1.2.*")] // Windows以外ではこの値が取得される
Imports System
Imports System.Diagnostics
Imports System.Reflection
Class Sample
Shared Sub Main()
' 現在実行しているアセンブリ(.exeのアセンブリ)を取得する
Dim assm As [Assembly] = [Assembly].GetExecutingAssembly()
' アセンブリのファイルパスを取得する
Dim path As String = assm.Location
' アセンブリのFileVersionInfoを取得する
Dim versionInfo As FileVersionInfo = FileVersionInfo.GetVersionInfo(path)
' ファイル名とバージョンを取得して表示する
Console.WriteLine("{0} {1}", versionInfo.FileName, versionInfo.FileVersion)
End Sub
End Class
Imports System.Reflection
' FileVersionInfo.GetVersionInfoでは以下どちらかの値が取得される
<Assembly: AssemblyFileVersion("4.3.2.1")> ' Windows上またはMonoではこの値が取得される
<Assembly: AssemblyVersion("1.2.*")> ' Windows以外ではこの値が取得される
E:\>csc /out:TestApplication.exe AssemblyInfo.cs test.cs & TestApplication.exe
E:\TestApplication.exe 4.3.2.1
$mcs -out:TestApplication.exe AssemblyInfo.cs test.cs && mono TestApplication.exe
/home/smdn/TestApplication.exe 4.3.2.1
AssemblyVersionをAssemblyInfoではなくプロジェクトファイルで指定した場合。 (取得用のコードは上記と同じ)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<OutputType>Exe</OutputType>
<!-- FileVersionInfo.GetVersionInfoでは以下どちらかの値が取得される -->
<AssemblyFileVersion>4.3.2.1</AssemblyFileVersion> <!-- Windows上またはMonoではこの値が取得される -->
<AssemblyVersion>1.2</AssemblyVersion> <!-- Windows以外ではこの値が取得される -->
</PropertyGroup>
</Project>
>dotnet run
C:\Users\smdn\TestApplication\bin\Debug\net5.0\TestApplication.dll 4.3.2.1
$dotnet run
/home/smdn/TestApplication/bin/Debug/net5.0/TestApplication.dll 1.2
Application.ProductVersion
Application.ProductVersionプロパティからもバージョン情報を取得することができるが、.NET Frameworkと、.NET/.NET Coreでは取得できる値に違いがある。
Application.ProductVersionは、それぞれ次の優先順位でバージョン情報を取得し、取得できたものを返す。 例えば.NET FrameworkではInformationalVersionが設定されていなければFileVersionを、FileVersionが設定されていなければ既定値(1.0.0.0
)を返すが、.NET/.NET CoreではInformationalVersionが設定されていなければFileVersionではなくVersionに設定されている既定値を返す。
実装 | 取得できる値(優先順位の高い順) |
---|---|
.NET Framework | 1. InformationalVersion 2. FileVersion |
.NET/.NET Core | 1. InformationalVersion 2. Version |
Application.ProductVersionは、アプリケーションのエントリポイントを含むアセンブリ(Assembly.GetEntryAssemblyで取得されるアセンブリ)の情報を返すので、当然他のアセンブリのバージョン情報を取得することはできない。
.NET Frameworkの実装では、追加的なバージョン情報(InformationalVersion)またはアセンブリのファイルバージョン(FileVersion)を取得することができる。
using System;
using System.Windows.Forms;
class Sample {
static void Main()
{
// Applicationクラスのプロパティを参照してバージョン情報を取得する
Console.WriteLine("{0} {1}", Application.ProductName, Application.ProductVersion);
}
}
using System.Reflection;
[assembly: AssemblyVersion("1.2.*")]
// Application.ProductVersionでは以下のいずれかの値が取得される
[assembly: AssemblyFileVersion("4.3.2.1")]
//[assembly: AssemblyInformationalVersion("9.9.9.9")]
Imports System
Imports System.Windows.Forms
Class Sample
Shared Sub Main()
' Applicationクラスのプロパティを参照してバージョン情報を取得する
Console.WriteLine("{0} {1}", Application.ProductName, Application.ProductVersion)
End Sub
End Class
Imports System.Reflection
<Assembly: AssemblyVersion("1.2.*")>
' Application.ProductVersionでは以下のいずれかの値が取得される
<Assembly: AssemblyFileVersion("4.3.2.1")>
' <Assembly: AssemblyInformationalVersion("9.9.9.9")>
E:\>csc /out:TestApplication.exe AssemblyInfo.cs test.cs & TestApplication.exe
E:\TestApplication.exe 4.3.2.1
$mcs -out:TestApplication.exe AssemblyInfo.cs test.cs && mono TestApplication.exe
/home/smdn/TestApplication.exe 4.3.2.1
.NET/.NET Coreの実装では、追加的なバージョン情報(InformationalVersion)を取得することができる。 InformationalVersionが設定されていない場合はVersionに設定されている既定値が返される。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5-windows</TargetFramework>
<OutputType>WinExe</OutputType>
<UseWindowsForms>true</UseWindowsForms>
<!-- Application.ProductVersionプロパティでは以下の値が取得される -->
<InformationalVersion>1.0 beta</InformationalVersion>
<!-- Application.ProductVersionプロパティでは以下の値は取得されない -->
<AssemblyVersion>1.2.3.4</AssemblyVersion>
<FileVersion>4.3.2.1</FileVersion>
</PropertyGroup>
</Project>
取得用のコードは上記と同じものを使用。
>dotnet bin\Debug\net5-windows\TestApplication.dll
TestApplication 1.0 beta
AssemblyInformationalVersionにはmajor.minor.build.revision
以外の形式、任意の文字列を指定することが許容される。 そのため、Application.ProductVersionプロパティから取得できる値は、必ずしもVersionクラスに変換できるとは限らないので注意する必要がある。
using System;
using System.Reflection;
using System.Windows.Forms;
[assembly: AssemblyVersion("1.2.*")]
[assembly: AssemblyFileVersion("4.3.2.1")]
[assembly: AssemblyInformationalVersion("1.0 beta")] // major.minor.build.revisionの形式ではないバージョン表記を指定する
class Sample {
static void Main()
{
Console.WriteLine("{0} {1}", Application.ProductName, Application.ProductVersion);
// Application.ProductVersionで得られるバージョン文字列をVersionクラスに変換しようとする
var version = Version.Parse(Application.ProductVersion); // FormatExceptionがスローされる
}
}
Imports System
Imports System.Reflection
Imports System.Windows.Forms
<Assembly: AssemblyVersion("1.2.*")>
<Assembly: AssemblyFileVersion("4.3.2.1")>
<Assembly: AssemblyInformationalVersion("1.0 beta")> ' major.minor.build.revisionの形式ではないバージョン表記を指定する
Class Sample
Shared Sub Main()
Console.WriteLine("{0} {1}", Application.ProductName, Application.ProductVersion)
' Application.ProductVersionで得られるバージョン文字列をVersionクラスに変換しようとする
Dim version As Version = Version.Parse(Application.ProductVersion) ' FormatExceptionがスローされる
End Sub
End Class