836

C#Windowsフォームアプリケーション(Visual Studio 2005)でいくつかの単体テストを実行しようとすると、次のエラーが発生します。

System.IO.FileLoadException:ファイルまたはアセンブリ'Utility、Version = 1.2.0.200、Culture = neutral、PublicKeyToken=764d581291d764f7'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)**

x.Foo.FooGO()で

Foo.cs:line 123のx.Foo.Foo2(String groupName_)で

FooTests.cs:line 98 **のx.Foo.UnitTests.FooTests.TestFoo()で

System.IO.FileLoadException:ファイルまたはアセンブリ'Utility、Version = 1.2.0.203、Culture = neutral、PublicKeyToken=764d581291d764f7'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULTからの例外:0x80131040)

私は自分のレファレンスを調べましたが、レファレンスしかありませんUtility version 1.2.0.203(もう1つは古いです)。

このDLLファイルのこの古いバージョンを参照しようとしているものを理解する方法についての提案はありますか?

その上、私は私のハードドライブにこの古いアセンブリさえ持っていないと思います。この古いバージョンのアセンブリを検索するためのツールはありますか?

4

58 に答える 58

489

.NET アセンブリ ローダー:

  • 1.2.0.203 が見つかりません
  • しかし、1.2.0.200が見つかりました

このアセンブリは要求されたものと一致しないため、このエラーが発生します。

簡単に言えば、参照されたアセンブリが見つかりません。GAC またはアプリケーション パスに配置して、適切なアセンブリを見つけることができることを確認します。https://docs.microsoft.com/archive/blogs/junfeng/the-located-assemblys-manifest-definition-with-name-xxx-dll-does-not-match-the-assembly-referenceも参照してください。

于 2008-10-18T13:39:12.460 に答える
95

この問題のトラブルシューティングを行うには、いくつかの方法があります。まず、Windows ファイル検索を使用して、アセンブリ (.dll) のハード ドライブを検索します。結果のリストが表示されたら、[表示] -> [詳細の選択...] を実行し、[ファイル バージョン] を確認します。これにより、結果のリストにバージョン番号が表示されるため、古いバージョンがどこから来たのかを確認できます。

また、Larsが言ったように、GACをチェックして、そこにリストされているバージョンを確認してください. This Microsoft articleは、GACで見つかったアセンブリはビルド中にローカルにコピーされないため、すべてを再構築する前に古いバージョンを削除する必要があるかもしれないと述べています. (これを行うためのバッチファイルの作成に関するメモについては、この質問に対する私の回答を参照してください)

古いバージョンがどこから来ているのかわからない場合は、Visual Studio に同梱されている fuslogvw.exe アプリケーションを使用して、バインドの失敗に関する詳細情報を取得できます。Microsoft は、このツールに関する情報をここに持っています。HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion\EnableLogレジストリ キーを 1 に設定して、ログを有効にする必要があることに注意してください。

于 2008-10-20T21:31:48.247 に答える
62

私は自分自身でこの問題に遭遇しましたが、この問題は他の人が遭遇したものとは異なるものであることがわかりました.

メイン プロジェクトが参照していた 2 つの DLL がありました。それは、CompanyClasses.dll と CompanyControls.dll です。次のような実行時エラーが発生しました。

ファイルまたはアセンブリ 'CompanyClasses, Version=1.4.1.0, Culture=neutral, PublicKeyToken=045746ba8544160c' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません

問題は、システムにバージョン番号が 1.4.1 の CompanyClasses.dll ファイルがなかったことです。GACにもアプリフォルダーにもありません...どこにもありません。ハードドライブ全体を検索しました。私が持っていた CompanyClasses.dll ファイルはすべて 1.4.2 でした。

私が発見した本当の問題は、CompanyControls.dll が CompanyClasses.dll のバージョン 1.4.1 を参照していたことです。CompanyControls.dll を再コンパイルしたところ (CompanyClasses.dll 1.4.2 を参照した後)、このエラーは解消されました。

于 2009-11-17T19:15:27.677 に答える
57

以下は、任意のアセンブリ バージョンをバージョン 3.1.0.0 にリダイレクトします。App.config でこの参照を常に更新するスクリプトがあるため、この問題に再度対処する必要はありません。

リフレクションを通じて、アセンブリ publicKeyToken を取得し、.dll ファイル自体からこのブロックを生成できます。

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.1.0.0" />
  </dependentAssembly>
</assemblyBinding>

XML 名前空間属性 (xmlns) がないと、これは機能しないことに注意してください。

于 2012-11-02T00:34:57.527 に答える
48

Visual Studio を使用している場合は、「クリーン ソリューション」を試してから、プロジェクトを再構築してください。

于 2010-07-13T03:27:38.163 に答える
41

他の答えは私にはうまくいきません。バージョンを気にせず、アプリを実行したいだけの場合は、参照を右クリックして「特定のバージョン」を false に設定します...これは私にとってはうまくいきました。 ここに画像の説明を入力

于 2013-06-28T17:21:26.330 に答える
22

この問題に遭遇したところ、アプリケーションのデバッグディレクトリに.dllの古いコピーがあったことが問題でした。(GACの代わりに)そこでもチェックして、表示されるかどうかを確認することをお勧めします。

于 2009-09-03T00:00:33.947 に答える
14

私の場合、C:\WINDOWS\Microsoft.NET\Framework\~\Temporary ASP.NET Files\ ディレクトリにある古いバージョンの DLL でした。古いバージョンを削除または置換するか、プロジェクト内の DLL への参照を削除して再度追加することができます。基本的に、どちらの方法でも、一時的な ASP.NET ファイルへの新しいポインターが作成されます。

于 2010-09-15T17:07:15.897 に答える
8

私たちにとって、問題は他の何かによって引き起こされました。DevExpress コンポーネントのライセンス ファイルには、この特定のコンピューターにインストールされていない古いバージョンのコンポーネント用の 2 つの行が含まれていました。ライセンス ファイルから古いバージョンを削除すると、問題が解決しました。

厄介な部分は、エラーメッセージがどの参照が問題を引き起こしているかを示していないことです.

于 2009-11-23T11:09:54.437 に答える
7

リフレクションを使用して遅延バインドしようとすると、バインド先のアセンブリに厳密な名前が付けられているか、公開キー トークンが変更されている場合に、まったく同じエラーがスローされます。指定された公開キー トークンを持つアセンブリが実際には見つからなくても、エラーは同じです。

エラーを解決するには、正しい公開鍵トークン (dll で sn -T を使用して取得できます) を追加する必要があります。お役に立てれば。

于 2010-07-16T21:22:26.893 に答える
5

私の状況は Nathan Bedford の投稿と非常によく似ていましたが、少しひねりがありました。私のプロジェクトも、変更された dll を 2 つの方法で参照しました。1) 直接および 2) 変更された dll への参照をそれ自体が持っていたコンポーネント (クラス ライブラリ) を参照することにより、間接的に。これで、コンポーネント (2) の Visual Studio プロジェクトは、変更された dll の正しいバージョンを参照しました。ただし、コンポーネント自体のバージョン番号は変更されていません。その結果、プロジェクトの新しいバージョンをインストールしても、クライアント マシン上のそのコンポーネントを置き換えることができませんでした。

最終結果: 直接参照 (1) と間接参照 (2) は、クライアント マシンで変更された dll の異なるバージョンを指していました。私の開発マシンでは問題なく動作しました。

解決策: アプリケーションを削除します。アプリケーション フォルダからすべての DLL を削除します。私の場合のように簡単に再インストールします。

于 2010-08-08T17:28:05.337 に答える
5

私の問題は、参照されているアセンブリをプルすることなく、ソース コードを新しいマシンにコピーすることでした。

エラーを修正したものは何もないので、急いで BIN ディレクトリを完全に削除しました。ソースコードを再構築したところ、それ以降は機能しました。

于 2012-04-27T23:20:00.723 に答える
4

私は誰かが私のせん断の愚かさから利益を得られるようにします。完全に別のアプリケーション (これを App1 と呼びましょう) への依存関係がいくつかあります。その App1 からの dll は、新しいアプリケーション (App2) に取り込まれます。APP1 で更新を行うたびに、新しい dll を作成して App2 にコピーする必要があります。良い。. .App1 の 2 つの異なるバージョン間でのコピー アンド ペーストにうんざりしたので、dll に「NEW_」プレフィックスを追加しました。

良い。. . ビルド プロセスが /bin フォルダーをスキャンし、何かが間違って一致すると、上記と同じエラー メッセージが表示されると推測しています。「new_」バージョンを削除したところ、ダンディなビルドになりました。

于 2012-03-13T15:32:56.537 に答える
4

私のapp.configには

<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.11.0"/>

npgsql の場合。どういうわけか、ユーザーのマシンで、私の app.exe.config が行方不明になりました。それがばかげたユーザーだったのか、インストーラーの不具合なのか、それともウイルス対策の機能を失ったのかはまだわかりません. ファイルを置き換えると問題が解決しました。

于 2012-10-01T21:34:14.780 に答える
4

assemblyBinding のナゲット バージョンが間違っている可能性があります:

  1. web.config / app.config 内のすべてのアセンブリ バインド コンテンツを削除します。
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-3.1.3.0" newVersion="3.1.3.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.ComponentModel.Annotations" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.2.1.0" newVersion="4.2.1.0" />
  </dependentAssembly>
</assemblyBinding>
  1. パッケージ マネージャー コンソールに「Add-BindingRedirect」と入力します。
  2. 必要なバインディング リダイレクトがすべて生成される
  3. アプリケーションを実行して、正しく動作するかどうかを確認します。そうでない場合は、パッケージ コンソールが見逃したバインディング リダイレクトを追加します。
于 2021-02-27T12:45:29.853 に答える
3

私にとって、「Local.testtesttings」ファイルのコードカバレッジ構成が問題を「引き起こしました」。そこで参照されていたファイルを更新するのを忘れました。

于 2013-03-04T09:04:45.777 に答える
3

このエラーが発生する別の理由を見つけました。特定のライブラリのすべてのバージョンから GAC を消去し、実行可能ファイルと共にデプロイされた特定のバージョンを参照してプロジェクトをビルドしました。プロジェクトを実行すると、新しいバージョンのライブラリを検索するときにこの例外が発生しました。

その理由は出版社の方針でした。GAC からライブラリのバージョンをアンインストールしたときに、発行元ポリシー アセンブリもアンインストールするのを忘れていたため、ローカルに展開されたアセンブリを使用する代わりに、アセンブリ ローダーが GAC で発行元ポリシーを見つけ、新しいバージョンを検索するように指示しました。

于 2012-06-01T13:07:32.967 に答える
1

私の場合、問題は椅子とキーボードの間にありました:-)

Could not load file or assembly 'DotNetOpenAuth.Core, Version=4.0.0.0,
Culture=neutral, PublicKeyToken=2780ccd10d57b246' or one of its dependencies.
The located assembly's manifest definition does not match the assembly reference.
(Exception from HRESULT: 0x80131040)

2 つ以上の異なるアセンブリが異なるバージョンの DotNetOpenAuth ライブラリを使用したいと考えていましたが、それは問題ではありません。さらに、私のローカル コンピューターでは、NuGet によって web.config が自動的に更新されました。

<dependentAssembly>
    <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
    </dependentAssembly>
    <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
</dependentAssembly>

その後、新しい web.config を運用サーバーにコピー/デプロイするのを忘れていたことに気付きました。したがって、web.config を手動で展開する方法がある場合は、更新されていることを確認してください。運用サーバー用にまったく異なる web.config がある場合は、NuGet を使用した後に、これらのdependentAssembly セクションを同期してマージする必要があります。

于 2014-12-07T16:24:39.980 に答える
1

同じエラーが発生しました...私の場合、次のように解決されました:

  • 最初にアプリケーションがインストールされたとき、ここの人々はアプリケーションで Microsoft Enterprise Library 4.1 を使用していました。
  • 先週、私のマシンはフォーマットされました。その後、今日そのアプリケーションをビルドすると、エンタープライズ ライブラリ アセンブリが見つからないというエラーが表示されました。
  • 次に、最初の検索エントリとして Google で入手した Microsoft Enterprise Library 5.0 をインストールしました。
  • 次に、アプリケーションをビルドすると、上記のエラーが表示されました。つまり、配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しません。
  • 多くの検索作業と分析の後、アプリケーションが 4.1.0.0 を参照しており、bin フォルダー内の DLL のバージョンが 5.0.0.0 であることがわかりました。
  • 次に、Microsoft Enterprise Library 4.1 をインストールしました。
  • 以前の参照 (5.0) を削除し、4.0 の参照を追加しました。
  • アプリケーションと出来上がりを構築しました...うまくいきました。
于 2015-04-29T13:10:10.133 に答える
0

Webサイトの1つのDLLファイルを更新しようとしたときに同様の問題が発生しました。

このエラーは、このDLLファイルをFTP経由でbinフォルダーにコピーしたときに発生していました。

私はこの問題を次のように解決しました:

  1. Webサイトを停止します。
  2. 必要なDLLファイル/DLLファイルをコピーします。
  3. ウェブサイトを開始する
于 2012-09-06T07:20:24.433 に答える
0

ユニットのテストケースを実行しているときに、同じ問題に直面しました。

エラーは、問題が明確に示されています。アセンブリを読み込もうとすると、.NETアセンブリローダーは、マニフェストデータ(参照されるアセンブリ名、公開鍵トークン、バージョン)に基づいて参照されるアセンブリを読み込もうとします。

マニフェストデータを確認するには:

  1. Visual Studioコマンドプロンプトを開き、
  2. 'ildasm'と入力し、必要なアセンブリをILDASMウィンドウにドラッグして、MANIFESTビューを開きます。MANIFESTには、古いバージョンと新しいバージョン(Utility, Version=1.2.0.200およびなどUtility, Version=1.2.0.203)の2つのバージョンを持つ1つのアセンブリが含まれる場合があります。実際には、参照されるアセンブリはですUtility, Version=1.2.0.203(new version)が、マニフェストには偶数が含まれているためUtility, Version=1.2.0.200(old version)、.NETアセンブリローダーはこのバージョン管理されたDLLファイルを見つけようとし、見つけられず、例外をスローします。

これを解決するには、プロジェクトに依存する各アセンブリを個別にILDASMウィンドウにドラッグし、どの依存アセンブリが古いアセンブリバージョンのマニフェストデータを保持しているかを確認します。この依存アセンブリを再構築して、プロジェクトに参照してください。

于 2013-03-11T10:38:32.000 に答える
0

InstallShield の使用を開始した後、この問題が発生しました。ビルド順序は、インストール プロジェクトが最後であることを示していましたが、順不同でビルドされていました。

他のすべてのプロジェクトをそれに依存させることでこれを修正しました。これにより、インストールが最後にビルドされ、アセンブリの不一致が解消されました。これが役立つことを願っています。

于 2014-09-22T15:50:49.787 に答える
0

内部パッケージ リポジトリを使用しているときに、この問題に遭遇しました。メイン パッケージを内部リポジトリに追加しましたが、パッケージの依存関係は追加しませんでした。すべての依存関係、依存関係の依存関係、再帰などを内部リポジトリにも追加してください。

于 2014-01-24T16:01:08.433 に答える
0

今日も同じ問題が発生し、Entity Framework に変更を加えた後、Add-Migration を実行できませんでした。

私のソリューションには 2 つのプロジェクトがありました。それらを「クライアント」と「データ」と呼びましょう。これは、私の EF モデルとコンテキストを保持するクラス ライブラリ プロジェクトです。クライアントはデータ プロジェクトを参照しました。

私は両方のプロジェクトに署名し、後で EF モデルに変更を加えました。署名を削除した後、移行を追加して、プロジェクトに新たに署名することができました。

これが誰かの役に立つことを願っています.

于 2014-08-01T13:55:22.127 に答える
0

これは、AssemblyVersion タグを含む AssemblyInfo.cs と .csproj ファイルの値が異なる場合にも発生する可能性があります。AssemblyInfo を一致させるか、セクションをすべて一緒に削除することで、問題は解決します。

于 2015-12-04T08:57:21.147 に答える
0

ビルド中のアセンブリと同じ名前のアセンブリを参照したため、このエラー メッセージが表示されました。

これはコンパイルされましたが、参照されているアセンブリが現在のプロジェクト アセンブリで上書きされたため、エラーが発生しました。

それを修正するために、プロジェクトの名前を変更し、プロジェクトを右クリックして [プロパティ] を選択すると使用できるアセンブリ プロパティを変更しました。

于 2011-07-12T02:24:30.700 に答える
-1

Visual Studio デバッガーでコードを実行してください。例外が発生するまで実行してください。Visual Studio 例外 UI があります。Visual Studio Exception の下部にある「完全な詳細」/「詳細を表示」をお読みください。完全な詳細/詳細の表示で、私のプロジェクトの 1 つ (私のメイン プロジェクトを参照していた) には、異なるバージョンの Microsoft.IdentityModel.Clients.ActiveDirectory があることがわかりました。私の場合、単体テスト プロジェクトが私のプロジェクトを呼び出していました。単体テスト プロジェクトとプロジェクトの Microsoft.IdentityModel.Clients.ActiveDirectory のバージョンが異なります。単体テストの実行中に実行時エラーが発生しました。

単体テスト プロジェクトのバージョンをメイン プロジェクトの同じバージョンで更新しました。それは私のために働いた。

于 2019-08-25T05:10:40.693 に答える
-4

不足しているものをグローバルアセンブリキャッシュに追加してみてください。

于 2010-07-01T13:59:07.083 に答える
-4

VS で参照を右クリックし、「特定のバージョン」プロパティを True に設定します。

于 2010-09-01T19:41:26.353 に答える