web-dev-qa-db-ja.com

.NETでSystem.TypeLoadExceptionエラーをデバッグする方法は?

参照アセンブリの1つで次のエラーが表示されます。

Could not load type 'System.Func`2' from Assembly 'MyAssembly, ...

正直なところ、System.TypeLoadExceptionエラーを最後に見たときのことを思い出せないか、見た場合の解決策は明らかでした。私の最初の本能は、何を確認することでした MSDNはそれについて言わなければなりませんでした

TypeLoadExceptionは、共通言語ランタイムがアセンブリ、アセンブリ内の型を見つけられない場合、または型をロードできない場合にスローされます。

おそらく私はこれを間違って読んでいますが、CLRは単にタイプを見つけることができないと言っていますか?これがmscorlibにないものである場合、それはより理にかなっているかもしれません。これはすべてVS2010で.NET4の上に構築されたため、モノラルまたはその他の奇妙なライブラリの問題はありません。私はこれを考えすぎていますか?どうしたの?

27
kertosis

問題は、バージョンに不一致があることです。すべてのアセンブリが.NET 4用にコンパイルされていることを確認してください。

27
Gabe

リファクタリング後にこのエラーを受け取りました。同じ名前のDLLにコンパイルする2つのプロジェクトがありました。

プロジェクトのプロパティの「アプリケーション」セクションで「アセンブリ名」を確認します。

26
Ian Warburton

特定のシナリオについてはわかりませんが、通常、アセンブリバインドログビューアー(fuslogvw)は、型の読み込みの問題のデバッグに非常に役立ちます。詳細は http://msdn.Microsoft.com/en-us/library/e74a18c4.aspx

13
Ragesh

ロードしようとしているアセンブリを変更してもGACに古いバージョンが残っている場合にも、これが表示されることがあります。 VSプロジェクトで参照するものではなく、GACされたバージョンをロードしようとします。

3
Jay

クリーンアップ作業でクラスをあるプロジェクトから別のプロジェクトに移動すると、このエラーが発生しました。他の考えられるすべての理由を確認した後、ソリューションの各プロジェクトをリロードし、すべてが機能しました。

  1. ソリューションエクスプローラーでプロジェクト名を右クリックします
  2. プロジェクトのアンロードを選択
  3. ソリューションエクスプローラーでプロジェクト名を右クリックします
  4. プロジェクトのリロードを選択
1
RWL01

一部のクラスを独自のライブラリに移動するためにリファクタリングし、元のプロジェクトで使用していたものとは異なるバージョンのライブラリ(NuGetで取得)を新しいライブラリにロードしようとしたときに、この例外が発生しました。

それを修正したのは、古いプロジェクトでNuGetマネージャーを開き、適切なパッケージを新しいライブラリで使用していたのと同じバージョンに更新することでした。

0
Aaron Averett

この問題は、異なるプロジェクトに異なるバージョンのNuGetパッケージがインストールされている場合に発生する可能性があります。これらのケースを特定するには、

  1. ソリューションエクスプローラーでソリューションを右クリックし、[ソリューションのNugetパッケージの管理]を選択します
  2. 「統合」タブを選択します
  3. 特定されたパッケージについては、必要なバージョンを特定し、「インストール」をクリックしてパッケージをそのバージョンに統合します。
0