2005年05月08日
川俣晶の縁側ソフトウェア技術雑記 total 9285 count

.NET Frameworkで現在実行中のアセンブリのフルパス名を得る方法

Written By: 川俣 晶連絡先

 非常につまらない話なのですが。

 1つだけ、「罠」になり得る問題があるのでメモっておきます。

状況 §

 複数のアセンブリから構成された.NET Frameworkによるプログラムがあるとします。

 あるアセンブリの中で、主に自分が置かれたパス名を知りたいという理由で、そのアセンブリのファイル名のフルパスを取得したいとします。(実行開始された実行ファイルのフルパスではなく、実行中のDLLのフルパス)

これを取得する式 §

 上記の条件を満たすフルパスを取得する式は以下のようになります。

 (Managed C++で書かれています)

System::Reflection::Assembly::GetExecutingAssembly()->GetModules()[0]->FullyQualifiedName

 ただし、アセンブリにモジュールが1つという条件に適合しない場合、意図せざる結果を返す可能性もあり得ます。おそらく、通常は問題ないでしょう。

 なに? アセンブリとモジュールの区別が付かない? それは困りましたね……。いや私も資料をきちんと見ないと正確なところは言えないのだけれど (汗。

ここにある罠 §

 問題は、FullyQualifiedNameという名前にあります。

 ファイルのパスならPathという言葉が含まれていても良さそうですが、そうではありません。うっかり、ファイルを示すパス名ではなく、何か別の名前であると誤解して読み飛ばすと、永遠に意図したプロパティに辿り着けない悪夢に陥る可能性があります。