Hyper-V クイック作成エラー「Newtonsoft.Json, Version=12.0.0.0」解決方法

こんにちは、やまぱんです。

Hyper-Vの「クイック作成」を実行した際、以下のようなエラーが発生しました。
備忘録的にメモしておきます。
(解決はしましたが、何が原因でこうなったかはよくわかりません。)

ファイルまたはアセンブリ'NewtonsoftJson,Version=12.0.0.0,Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed'、またはその依存関係の1つが読み込めませんでした。見つかったアセンプリのマニフェスト定義はアセンプリ参照に一致しません。(HRESULT からの例外:0x80131040)

このエラーは、Hyper-Vが内部で使用するNewtonsoft.Jsonライブラリ(バージョン12.0.0.0)が正しく参照できないことが原因でした。本記事では、この問題を解消するために行ったトラブルシューティングと解決方法を共有します。

エラーの調査手順

1.現在のGACに登録されているアセンブリを確認: 以下のPowerShellコマンドを使用して、システムで利用されているNewtonsoft.Jsonのバージョンを確認しました。

  • PowerShell コマンド

    [System.AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.FullName -like "*Newtonsoft.Json*" } | Select-Object FullName, Location
  • 結果
    FullName                           Location
    Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed C:\Program Files\PowerShell\7\Newtonsoft.Json.dll

バージョン13.0.0.0が利用されており、Hyper-Vが要求するバージョン12.0.0.0が見つかりませんでした。

2.0 GAC内のアセンブリ検索: GAC全体を検索し、登録されているNewtonsoft.Jsonの情報を確認しました。

  • PowerShell コマンド
Get-ChildItem -Path "C:\Windows\assembly\GAC_MSIL" -Recurse | Where-Object { $_.Name -like "*Newtonsoft.Json*" }
  • 結果
Directory: C:\Windows\assembly\GAC_MSIL\HyperV-UX-UI-NewtonsoftJson

Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed

GACにはバージョン13.0.0.0のみが登録されており、Hyper-Vが必要とするバージョン12.0.0.0が見つかりませんでした。

解決方法

  1. 必要なDLLの取得
    Hyper-Vの動作に必要なNewtonsoft.Json.dll(バージョン12.0.0.0)を適切に入手します。

DLLのダウンロード:

ファイルを解凍:

解凍後、以下のパスに必要なDLLを確認:

Json120r1\Bin\net20\Newtonsoft.Json.dll

バージョンの確認:

[System.Reflection.AssemblyName]::GetAssemblyName("C:\Users\XXXXXX\Json120r1\Bin\net20\Newtonsoft.Json.dll").Version

GACにDLLを登録

取得したNewtonsoft.Json.dll(バージョン12.0.0.1)をGACに登録します。

  • PowerShell コマンド
    # GAC用フォルダを作成
    New-Item -ItemType Directory -Path "C:\Windows\assembly\GAC_MSIL\Newtonsoft.Json\12.0.0.0__30ad4fe6b2a6aeed"
    # DLLをコピー
    Copy-Item -Path "C:\Users\XXXXX\Downloads\Json120r1\Bin\net20\Newtonsoft.Json.dll" -Destination "C:\Windows\assembly\GAC_MSIL\Newtonsoft.Json\12.0.0.0__30ad4fe6b2a6aeed"
    # アクセス権を付与
    icacls "C:\Windows\assembly\GAC_MSIL\Newtonsoft.Json\12.0.0.0__30ad4fe6b2a6aeed" /grant administrators:F

Hyper-Vテンプレートのリセット

テンプレートやキャッシュが破損している可能性があるため、以下のコマンドでリセットを実行しました。

  • PowerShell コマンド
Remove-Item -Path "$env:ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\Quick Create" -Recurse -Force

結果

これらの手順を実施した後、Hyper-Vの「クイック作成」が正常に動作するようになりました。エラーは解消され、求めていた環境が無事に作成できました。

GAC とは

GAC(Global Assembly Cache) は、Windowsの.NET Frameworkで使用される特殊なフォルダで、共有アセンブリ(DLL)をシステム全体で一元管理するための仕組みです。

GACは、.NETアプリケーションが特定のバージョンのアセンブリ(DLL)を参照しやすくするために設計されており、以下のような特徴があります。

GACの格納場所
GACは、Windowsの特殊なシステムフォルダに存在します。以下はGACの主なディレクトリです:

  • GACディレクトリ(Windowsの場合):
    通常の.NETアセンブリ: C:\Windows\assembly

  • MSIL(中間言語)形式のアセンブリ(.NET Framework 2.0以降):C:\Windows\assembly\GAC_MSIL

まとめ

  • 原因:
    Hyper-Vが参照するNewtonsoft.Jsonライブラリのバージョン12.0.0.0がGACに登録されていなかったこと。

  • 対策:
    必要なDLL(12.0.0.0)を入手してGACに登録。
    テンプレートやキャッシュのリセットで環境を整備。

  • 学び:
    Hyper-Vが依存するライブラリのバージョン管理が重要であること。
    GACの利用方法とPowerShellでの調査手法を理解。

もし同じ問題に直面した方がいれば、この手順が役立てば幸いです!

シェアする

  • このエントリーをはてなブックマークに追加

フォローする