- PR -

アセンブリからバージョン情報を取得する方法

投稿者投稿内容
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-04-02 00:53
デフォルトで作成されるAssemblyInfo.cs から下記の4つの属性をstring変数に
読み込む手順を教えてください。属性の使い方、ひいてはアセンブリについて
理解が不十分なので、なるべく簡単な手順をアドバイスいただければありがたいです。

// Major Version
// Minor Version
// Build Number
// Revision

[assembly: AssemblyVersion("1.0.*")]
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-04-02 00:56
追記 (すみません)
Visual Studio .NET 2003 C# でのアドバイスを希望します。
(Windowsアプリケーション)
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2004-04-02 06:43
こんにちは

現在動作中のAssemblyなら下記で簡単に取得出来ます。
System.Reflection.Assembly.GetExecutingAssembly().FullName;

趣旨と違っていたら無視して下さい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-02 08:16
 プログラム中でバージョン番号が参照したいのだと思いますが、
System.Reflection.Assembly.GetExecutingAssembly.GetName.Version
です。VB.NETのソースからコピペしたので、C#はちょっと違うかも。
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-04-03 00:36
ご指摘に内容で目的が果たせました。(C#でも動作しました)
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
ありがとうございました。

ただ、疑問があります。そもそも
[assembly: AssemblyVersion("1.0.*")]
がどうして(結びつけた覚えの無い)
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version
と結びつくのでしょうか?

類似した質問ですが、
プログラムの作成日(コンパイルした日)をパラメータとして取得したい場合、
上述のAssemblyから得られるRevisionとBuildから逆算するのが良いでしょうか?
この方法だと日付を逆算する必要がありますが、よりスマートな方法がありますか?

また、AssemblyInfo.csの下記属性にもアクセスしたいのですが、
どう参照すれば良いのでしょうか?
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]





Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-03 06:59
System.Reflection
引用:

System.Reflection 名前空間には、読み込まれた型、メソッド、およびフィールドのマネージ ビューを提供し、動的に型を作成したり呼び出すことができるようにするクラスとインターフェイスが含まれています。


System.Reflection.Assembly
引用:

アセンブリは、インフラストラクチャを用意します。このインフラストラクチャによって、Runtime がアプリケーションの内容を完全に理解し、アプリケーションで定義されるバージョン管理と依存関係の規則を適用できます。これらは、バージョン管理の問題を解決し、Runtime アプリケーションの配置を単純化するために重要な概念です。


System.Reflection.Assembly.GetExecutingAssembly
引用:

現在のコードを実行している Assembly を取得します。


System.Reflection.Assembly.GetExecutingAssembly.GetName
引用:

このアセンブリの AssemblyName を取得します。


System.Reflection.Assembly.GetExecutingAssembly.GetName.Version
引用:

アセンブリのメジャー番号、マイナ番号、リビジョン番号、ビルド番号を取得または設定します。


−−−すべてMSDNから引用
ひろし
ぬし
会議室デビュー日: 2002/09/16
投稿数: 390
お住まい・勤務地: 兵庫県
投稿日時: 2004-04-03 09:22
MSDNから引用までしていただきありがとうございます。

つまり、バージョン番号については汎用性が高く、また基本となる機能なので、最初からメソッドやプロパティが用意されているのですね。

それでは、AssemblyInfo.csに自分で独自の属性を追加し、それをパラメータ化
したい場合は、どうなるのでしょうか。
例えば下記の1行を独自に追加した場合、
どうやって変数に読み込めば良いのでしょうか?
[assembly: AssemblyMyTitle("テストプログラム")]

(私事ですが出張でコメントへの返信が遅れるかも知れません。ご理解願います)
いのつち
ベテラン
会議室デビュー日: 2002/05/14
投稿数: 73
投稿日時: 2004-04-03 18:10
引用:

それでは、AssemblyInfo.csに自分で独自の属性を追加し、それをパラメータ化
したい場合は、どうなるのでしょうか。
例えば下記の1行を独自に追加した場合、
どうやって変数に読み込めば良いのでしょうか?
[assembly: AssemblyMyTitle("テストプログラム")]




改訂版 C#入門 第20章 実行時に参照可能な属性
が参考になると思います。

 取得した Assembly のGetCustomAttributesメソッドかな?


スキルアップ/キャリアアップ(JOB@IT)