そのクラスを持っているアセンブリ(dllなど)の情報を見る

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

以前書いた記事👇で、

tera1707.com

あるクラスを定義しているアセンブリ(exeやdll)の情報をみたいなと思うときがあった。

やり方調べてみる。

やりかた

typeofAssemblyクラスを使う。

下記のmsdocsを参考に、コードを書いてみる。

learn.microsoft.com

実験コード

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