参照したライブラリとGAC内のライブラリが重複した場合の対処
「ライブラリAはB.dllとC.dllの両方に存在します」
というエラーが発生し、かつ参照しているライブラリは一つしかないのに、という場合、それはどうやらGAC(Global Assembly Cache)と重複しているようです。
この重複を解消する必要があり、その方法は2つあります。
- GAC内のライブラリの削除
- プロジェクトで参照しているライブラリの除外(または削除)
GAC内のライブラリの削除
削除にはgacutil
コマンドを使用するのですが、さて、これはどこにあるのでしょうか。
コマンドプロンプトで入力しても、そんなコマンドありません、と言われてしまいます。
これはVisual Studioのインストール時に一緒にインストールされるDeveloper Command Prompt for VS
で実行できるコマンドです。
これを起動して、以下のコマンドを実行します。
今回は「MySql.Data.dll」が重複しているということなので、GAC内の「MySql.Data.dll」を削除します。
まずは、そのライブラリがあるかどうかを確認してみましょう。
確認にはgacutil -l ライブラリ名
を実行します。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise>gacutil -l mysql.data Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0 Copyright (c) Microsoft Corporation. All rights reserved. グローバル アセンブリ キャッシュには次のアセンブリが含まれています: mysql.data, Version=8.0.14.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL 項目の数 = 1
見つかりました。では削除してみましょう。
削除にはgacutil -u ライブラリ名
を実行します。
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise>gacutil -u mysql.data Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0 Copyright (c) Microsoft Corporation. All rights reserved. アセンブリ: mysql.data, Version=8.0.14.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL インストール失敗: mysql.data, Version=8.0.14.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL 選択されたオプションを使うには、管理者のアクセス許可が必要です。管理者のコマンド プロンプトを使ってこれらのタスクを完了 してください。 アンインストールされたアセンブリの数 = 0 エラーの数 = 1
あらためて管理者権限で実行します。
C:\Windows\System32>gacutil -u mysql.data Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0 Copyright (c) Microsoft Corporation. All rights reserved. アセンブリ: mysql.data, Version=8.0.14.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL アンインストールできません: アセンブリは 1 つまたはそれ以上のアプリケーションで必要とされています 保留中の参照: スキーム: <WINDOWS_INSTALLER> ID: <MSI> 説明 : <Windows Installer> アンインストールされたアセンブリの数 = 0 エラーの数 = 0
うーん。どうやらMySql.Data
はWindows Installerから参照されているため削除できないようです。
GAC内のライブラリの削除という方法では、今回の件の解決にはなりませんでした。
プロジェクトで参照しているライブラリの除外(削除)
Visual Studioでは参照しているライブラリを削除することができますが、一時的に除外
することもできます。
削除
ソリューションエクスプローラーで参照しているライブラリを右クリックして、コンテキストメニューから削除
を選択すれば削除されます。
除外
削除ではなく一時的にプロジェクトから除外してビルド時に使用しないようにすることもできます。
先ほどと同じようにソリューションエクスプローラーで参照しているライブラリを右クリックして、コンテキストメニューからプロジェクトから除外
を選択します。
これだと、必要な時にまたコンテキストメニューからプロジェクトに復帰させることができます。