2018-05-17 (木)
[C#] アセンブリ情報やバージョンを取得する
AssemblyName, CustomAttribute, FileVersionInfo の3つの方法で取得します。
自分自身のアセンブリ情報と3つのバージョン(アセンブリ・ファイル・製品)を取得します。
⭐オススメ
本記事はアクセス数が多かったため、新しい記事を書きました。
⭐[C#] AssemblyInfo アセンブリ情報やバージョンを取得する (.NET Core比較版)
環境
- Windows 10 Pro 64bit 1709
- Visual Studio Community 2017 15.5.7
- .NET Framework 4.6.1
- C# 7.0
結果
プロジェクトのプロパティ設定です。
製品バージョン(AssemblyInformationalVersion
)だけはAssemblyInfo.cs
に直接記述しました。
AssemblyInfo.cs
[assembly: AssemblyTitle("タイトル")]
[assembly: AssemblyDescription("説明")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("会社")]
[assembly: AssemblyProduct("製品")]
[assembly: AssemblyCopyright("著作権")]
[assembly: AssemblyTrademark("商標")]
[assembly: AssemblyCulture("")]
[assembly: ComVisible(false)]
[assembly: AssemblyVersion("1.0.0.0")] // アセンブリバージョン
[assembly: AssemblyFileVersion("2.0.0.0")] // ファイルバージョン
[assembly: AssemblyInformationalVersion("3.0.0.0")] // 製品バージョン
[assembly: Guid("00000000-1111-2222-3333-444444444444")]
[assembly: NeutralResourcesLanguage("ja-JP")]
3つの方法で取得します。
// 1. AssemblyName
Assembly.GetExecutingAssembly().GetName();
// 2. FileVersionInfo
FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
// 3. CustomAttribute
(T)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(T))
各取得できる項目です。
項目 | AssemblyName | FileVersionInfo | Attribute |
---|---|---|---|
アセンブリ名 | ○ | ||
タイトル | ○ | ○ | |
説明 | ○ | ○ | |
会社 | ○ | ○ | |
製品 | ○ | ○ | |
著作権 | ○ | ○ | |
商標 | ○ | ○ | |
アセンブリ Ver | ○ | ||
ファイル Ver | ○ | ○ | |
製品 Ver | ○ | ○ | |
GUID | ○ | ||
ニュートラル言語 | ○ | ||
COM参照可能 | ○ | ||
(実行速度) | 早い | かなり遅い | 遅い |
(実行速度)
FileVersionInfoはファイルIOが遅く、Attributeはリフレクションで遅いのだと思います。
アセンブリ名とタイトルが同じで、3種類のバージョンも同じという場合は、以下のように取得すれば良いと思います。
var assembly = Assembly.GetExecutingAssembly().GetName();
var ver = assembly.Version;
// アセンブリ名 1.0.0.0
return $"{assembly.Name} {ver.Major}.{ver.Minor}.{ver.Build}.{ver.Revision}";
実装
全ての項目を取得
using System;
using System.Diagnostics;
using System.Reflection;
public void Get()
{
var assembly = Assembly.GetExecutingAssembly();
// 1. AssemblyName
var assemblyName = assembly.GetName();
// 2. FileVersionInfo
var fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location);
// 3. Attribute
T GetCustomAttribute<T>() where T : Attribute =>
(T)Attribute.GetCustomAttribute(assembly, typeof(T));
// AssemblyName = "アセンブリ名"
var n1 = assemblyName.Name;
// AssemblyTitle = "タイトル"
var t1 = GetCustomAttribute<AssemblyTitleAttribute>().Title;
var t2 = fileVersionInfo.FileDescription;
// AssemblyDescription = "説明"
var d1 = GetCustomAttribute<AssemblyDescriptionAttribute>().Description;
var d2 = fileVersionInfo.Comments;
// AssemblyCompany = "会社"
var c1 = GetCustomAttribute<AssemblyCompanyAttribute>().Company;
var c2 = fileVersionInfo.CompanyName;
// AssemblyProduct = "製品"
var p1 = GetCustomAttribute<AssemblyProductAttribute>().Product;
var p2 = fileVersionInfo.ProductName;
// AssemblyCopyright = "著作権"
var r1 = GetCustomAttribute<AssemblyCopyrightAttribute>().Copyright;
var r2 = fileVersionInfo.LegalCopyright;
// AssemblyTrademark = "商標"
var m1 = GetCustomAttribute<AssemblyTrademarkAttribute>().Trademark;
var m2 = fileVersionInfo.LegalTrademarks;
// NeutralResourcesLanguage = "ja-JP"
var l1 = GetCustomAttribute<NeutralResourcesLanguageAttribute>().CultureName;
// GUID = "00000000-1111-2222-3333-444444444444"
var g1 = GetCustomAttribute<GuidAttribute>().Value;
// ComVisible(COM参照可能) = "false"
var o1 = GetCustomAttribute<ComVisibleAttribute>().Value;
// AssemblyVersion = "1.0.0.0"
Version v1 = assemblyName.Version;
//GetCustomAttribute<AssemblyVersionAttribute>()?.Version; // null
// AssemblyFileVersion = "2.0.0.0"
string f2 = fileVersionInfo.FileVersion;
string v2 = GetCustomAttribute<AssemblyFileVersionAttribute>().Version;
// AssemblyInformationalVersion(製品バージョン) = "3.0.0.0"
string f3 = fileVersionInfo.ProductVersion;
string v3 = GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion;
}
AssemblyNameで取得
var assemblyName = Assembly.GetExecutingAssembly().GetName();
var n1 = assemblyName.Name; // "アセンブリ名"
var v1 = assemblyName.Version; // "1.0.0.0"
FileVersionInfoで取得
var fileVersionInfo = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location);
var t2 = fileVersionInfo.FileDescription; // "タイトル"
var d2 = fileVersionInfo.Comments; // "説明"
var c2 = fileVersionInfo.CompanyName; // "会社"
var p2 = fileVersionInfo.ProductName; // "製品"
var r2 = fileVersionInfo.LegalCopyright; // "著作権"
var m2 = fileVersionInfo.LegalTrademarks; // "商標"
var f2 = fileVersionInfo.FileVersion; // "2.0.0.0"
var f3 = fileVersionInfo.ProductVersion; // "3.0.0.0"
Attributeで取得
var assembly = Assembly.GetExecutingAssembly();
T GetCustomAttribute<T>() where T : Attribute =>
(T)Attribute.GetCustomAttribute(assembly, typeof(T));
var t1 = GetCustomAttribute<AssemblyTitleAttribute>().Title; // "タイトル"
var d1 = GetCustomAttribute<AssemblyDescriptionAttribute>().Description; // "説明"
var c1 = GetCustomAttribute<AssemblyCompanyAttribute>().Company; // "会社"
var p1 = GetCustomAttribute<AssemblyProductAttribute>().Product; // "製品"
var r1 = GetCustomAttribute<AssemblyCopyrightAttribute>().Copyright; // "著作権"
var m1 = GetCustomAttribute<AssemblyTrademarkAttribute>().Trademark; // "商標"
var l1 = GetCustomAttribute<NeutralResourcesLanguageAttribute>().CultureName; // "ja-JP"
var g1 = GetCustomAttribute<GuidAttribute>().Value; // "00000000-1111-2222-3333-444444444444"
var o1 = GetCustomAttribute<ComVisibleAttribute>().Value; // "false"
var v2 = GetCustomAttribute<AssemblyFileVersionAttribute>().Version; // "2.0.0.0"
var v3 = GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion; // "3.0.0.0"
感謝
2018-05-17 (木)
関連記事
新着記事