Skip to content

MS_DotNetAssemblyTargetFramework

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

.NETアセンブリのtargetFrameworkを確認する方法

概要

.NET アセンブリの targetFramework を確認する方法について。

補足(なぜ確認したくなるのか): 実務でこれが必要になるのは、
たいてい次のような場面である。

場面 知りたいこと
ビルド エラーの調査 参照 DLL が想定より新しいフレームワーク向けではないか
移行の棚卸し ソースが無い DLL が .NET Framework か .NET か
実行時の型読み込み失敗 netstandard2.0 のつもりが net48 だった、等

特に、NuGet 経由で入ってきた DLL や、
ベンダー提供でソースの無い DLL について調べる用途が多い。

ildasm

ildasm を使用して .NET アセンブリの targetFramework を確認できる。

  1. 「開発者用コマンドプロンプト for Visual Studio」を起動する。
  2. ildasm コマンドを option 無しで実行すると、ildasm の GUI が起動する。
  3. [メニュー]の[ファイル] → [開く]から、.NET アセンブリを開く。
  4. 表示されたツリーの[MANIFEST]をダブルクリックする。
  5. MANIFEST が表示されるので以下の「TargetFrameworkAttribute」辺りを確認する。
.assembly XXXX
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = (   
  .custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = (   

補足(実体は属性 1 つ): 確認しているのは、
コンパイル時にアセンブリへ自動で埋め込まれる
[assembly: TargetFramework(...)] 属性である。

[assembly: System.Runtime.Versioning.TargetFramework(
    ".NETCoreApp,Version=v8.0",
    FrameworkDisplayName = ".NET 8.0")]

つまり ildasm でなくても、この属性を読めばよい
以下、GUI に頼らない方法を補足する。

補足(ildasm 以外の確認方法/最新化): ildasm は
Windows + Visual Studio が前提で、
.NET Core 以降の環境では別の手段の方が手軽なことが多い。

手段 特徴
PowerShell(リフレクション) 追加インストール不要
ilspycmd / ILSpy クロスプラットフォーム。逆コンパイルもできる
monodis --assembly Mono 系
dotnet-counters 等ではなく**dotnet --info** 実行環境側を見る場合
System.Reflection.Metadata 自作ツールに組み込む場合

① PowerShell で確認する(最も手軽)

# 実行せずにメタデータだけ読む(ReflectionOnly 相当)
$asm = [System.Reflection.Assembly]::LoadFrom("C:\path\Foo.dll")
$asm.CustomAttributes |
  Where-Object { $_.AttributeType.Name -eq 'TargetFrameworkAttribute' } |
  ForEach-Object { $_.ConstructorArguments[0].Value }
# → .NETFramework,Version=v4.8

LoadFrom は実際に読み込むため、依存 DLL が無いと失敗することがある。
純粋にメタデータだけ見たい場合は、次の
MetadataLoadContext(.NET Core 3.0+)を使う。

var resolver = new PathAssemblyResolver(runtimeAssemblies.Append(path));
using var mlc = new MetadataLoadContext(resolver);
var asm = mlc.LoadFromAssemblyPath(path);
var tfm = asm.GetCustomAttributesData()
    .First(a => a.AttributeType.Name == "TargetFrameworkAttribute")
    .ConstructorArguments[0].Value;

② ILSpy(CLI)で確認する

dotnet tool install -g ilspycmd
ilspycmd -il Foo.dll | head -40

③ ネイティブか否かも合わせて確認したい場合

# マネージド アセンブリでなければ例外になる
[System.Reflection.AssemblyName]::GetAssemblyName("C:\path\Foo.dll")

なお、TargetFrameworkAttribute が無いアセンブリもある
(.NET Framework 4.0 未満でビルドされたもの、mscorlib 等)。
その場合は、参照している mscorlib / System.Runtime
バージョンから推定することになる。

参考

Microsoft Learn


Tags: 移行, .NET開発

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally