web-dev-qa-db-ja.com

デバッグエラー「タイプ 'xx'は参照されていないアセンブリで定義されています」

完全なエラーは次のとおりです。

タイプ 'System.Windows.Forms.Control'は、参照されていないアセンブリで定義されています。アセンブリ 'System.Windows.Forms、Version = 2.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089'への参照を追加する必要があります。

そして、それはSystem.Windows.Formsを必要としないライブラリプロジェクトの最初のクラスの最初のステートメント(Debug.Assert行)を指します(またはそう思った)。私はそれを解決する方法を知っています:言及された参照を追加してください。しかし、どのライブラリがこのエラーを引き起こしているのか、より良いのは、コードのどの部分がWinFormsライブラリを使用してトリガーするのかを知るにはどうすればよいですか?

通常、他のライブラリを参照するライブラリを追加できますが、実際に使用する場合にのみ、これらの他のライブラリへの参照を追加する必要があります。


編集:代替ソリューション

この問題または同様の問題は、Microsoftのフレームワークツールの Binding Log Viewer Fuslogvw.exe を使用して解決することもできます。アプリケーションがバインドするアセンブリのすべての試行と成功が表示されます。

22
Abel

System.Windows.Forms型を使用しておらず、コンパイラエラーがコードの(有用な)行を指していないため、これを引き起こしているコード行がないのではないかと思います。

私が起こっていると思うのは、System.Windows.Forms.Controlを返すか、パラメーターとして受け取る、公開されているメソッドまたはプロパティを持つライブラリを参照しているということです。実際にcallingそのメソッド/プロパティになるかどうかは関係ありません。公開されているという事実は、ライブラリが使用しているすべての型を独自のコードで解決できる必要があることを意味します。ライブラリがSystem.Windows.Forms internallyのみを使用している場合、これは発生しません。

また、依存しているアセンブリの依存関係を確認するだけで、疑わしいリストを絞り込むことができることも意味します。これは、System.Windows.Formsに内部的に依存しているアセンブリ(問題なし)と、問題のあるアセンブリが1つある可能性があるためです。 SWFormsアセンブリからのタイプのパブリックパラメータ/戻り値があります。

私の提案は、S.W。Formsを参照せずに空のプロジェクトを設定し、次に各依存関係を順番に追加して、それぞれの後にコンパイルを試みることです。

31
Chris

同じエラーが発生しました。

問題は、内部でSystem.Windows.Formsを使用するプロジェクトへの参照を使用したことでした。

解決策は、プロジェクトにもSystem.Windows.Formsへの参照を追加することです。

3
AnatB

NDepend、Reflector、またはObject Browserなどを使用して、依存しているアセンブリの依存関係を確認します。

上記の情報を考えると、他の方法は考えられません。

2
dice