もくじ
https://tera1707.com/entry/2022/02/06/144447
やりたいこと
以前書いた記事👇で、
あるクラスを定義しているアセンブリ(exeやdll)の情報をみたいなと思うときがあった。
やり方調べてみる。
やりかた
typeof
とAssembly
クラスを使う。
下記のmsdocsを参考に、コードを書いてみる。
実験コード
using Microsoft.UI.Xaml; using System.Diagnostics; using System.Reflection; // https://learn.microsoft.com/ja-jp/dotnet/api/system.reflection.assembly?view=net-8.0 namespace WindowMessageSender; public partial class App : Application { public App() { this.InitializeComponent(); } protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEventArgs args) { ShowAssemblyInfo<Application>(); } private void ShowAssemblyInfo<T>() { Assembly assem = typeof(T).Assembly; // フルネーム Debug.WriteLine($"Assembly Full Name :{assem.FullName}"); // 名前やバージョンを個別に取り出す AssemblyName assemName = assem.GetName(); Debug.WriteLine($"Name : {assemName.Name}"); Debug.WriteLine($"Version : {assemName.Version.Major}.{assemName.Version.Minor}"); // アセンブリの場所(Assembly CodeBaseは古いのでLocationを使うべし、らしい) Debug.WriteLine($"Assembly CodeBase : {assem.Location}"); //Debug.WriteLine(assem.CodeBase); // exeの場合はEntryPointが存在する(dllの場合はないっぽい) Debug.WriteLine($"Assembly entry point: {assem.EntryPoint}"); } }
出力
Assembly Full Name : Microsoft.WinUI, Version=3.0.0.0, Culture=neutral, PublicKeyToken=de31ebe4ad15742b Name : Microsoft.WinUI Version : 3.0 Assembly CodeBase : C:\git\WindowsMessageSenderWinui\WindowMessageSender\WindowMessageSender (Package)\bin\x64\Debug\AppX\WindowMessageSender\Microsoft.WinUI.dll Assembly entry point:
参考
Assembly Class
↑のコードのもとにした公式ページ
https://learn.microsoft.com/en-us/dotnet/api/system.reflection.assembly?view=net-8.0