EXEファイルのバージョン番号などを得る手順

C#で書いてビルドしたEXEファイルには、バージョン番号とかタイトルなどの情報が保存されていて、System.Reflectionを使うと読み出すことができます。その手順をメモします。


EXEファイルのバージョン番号を表示するには、フォームにボタンを貼って、下記のコードを追記する。ああ、最初に「using System.Reflection;」をお忘れなく。
  1. Attribute att = Attribute.GetCustomAttribute(
  2.  Assembly.GetExecutingAssembly(),
  3.  typeof(AssemblyFileVersionAttribute));
  4. AssemblyFileVersionAttribute attVersion = (AssemblyFileVersionAttribute)att;
  5. MessageBox.Show(attVersion.Version);
呪文みたいに長々しい。「myApp.Version」みたいに参照できたら簡単なのにね。

実行するとこんな感じ。


毎回、こんな長いコードを書くのはいやなので、クラスライブラリを作って簡単に呼び出したいと思ったとしよう。

どうするか。

まずクラスライブラリのプロジェクトを新規に作成してソリューションに追加する。下図のmyLibraryが追加したクラスライブラリ。


そして、アセンブリのバージョン番号を返すメソッドを追加する。メソッドはお気軽に呼び出したいのでstaticにしておく。
  1. using System.Reflection;
  2. namespace myLibrary
  3. {
  4.     public class myAssembly
  5.     {
  6.         static public string myAppVersion()
  7.         {
  8.             Attribute att = Attribute.GetCustomAttribute(
  9.                  Assembly.GetCallingAssembly(),
  10.                  typeof(AssemblyFileVersionAttribute));
  11.             AssemblyFileVersionAttribute attVersion = (AssemblyFileVersionAttribute)att;
  12.             return attVersion.Version;
  13.         }
  14.     }
  15. }
ここで気をつけるのは、上で使っていたGetExecutingAssemblyメソッドをGetCallingAssemblyに変えること。欲しいのは自分のバージョン番号ではなく、呼び出している親のアセンブリのバージョン番号なので。EXEファイルとDLLファイルに分けたのでこれが必要。

呼び出す側は、

  1. MessageBox.Show(myLibrary.myAssembly.myAppVersion());

と1行で終わり。簡単でよろしい。



コメント

このブログの人気の投稿

varchar をデータ型 numeric に変換中に、算術オーバーフロー エラーが発生しました。