2

次のコード行ではエラーが発生します。

private MyContext context;

エラー:

The type 'System.Data.Entity.DbContext' is defined in an assembly that is not referenced.

MyContextDbContext を拡張MyContextし、参照されるアセンブリで定義されます。Javaでこの種のエラーを見たことはありません。依存関係によって参照されるアセンブリで定義されている型をコンパイラが検出できないのはなぜですか?

4

2 に答える 2

1

そのアセンブリが存在しない可能性があるためです。

考えてみてください:

COM ポートで動作する完璧な DLL Aが作成されました。System.IO.Comports.dllただし、意図したとおりに正確に機能するために、ある種のライブラリを参照します。

次に、誰かがあなたの Aライブラリを使用したいと考え、それを参照します。System.IO.Comports.dllライブラリがプロジェクト、bin フォルダー、または system32 ディレクトリに存在することをどのように知る必要がありますか? それともどこで探す?「誰か」が開発しているEXEプロジェクトの直接の参照はありません。

直接参照は、.NET Framework などのプレインストールされたものを除いて、常に出力ディレクトリにコピーされ、実行可能ファイルがそれらを確実に見つけられるようにします。

タイプ 'System.Data.Entity.DbContext' は、参照されていないアセンブリで定義されています。

このタイプは、複数のバージョンを持つ複数のライブラリで定義される可能性があり、Visual Studio が必要なバージョンと一致するかどうかを確認するためにそれぞれを検索する方法はありません。そのため、プロジェクトには直接参照が必要であり、それがほとんどすべての理由です。 net の DLL は、追加の参照で煩わされないように、自分自身のみを参照します。

于 2013-10-10T07:06:13.897 に答える
0

コンパイラはアセンブリ内に格納されている型情報を確認する必要があるため、アセンブリが見つからない場合、このエラーがスローされます。

アセンブリが参照されている場合、アセンブリは出力ディレクトリにコピーされ、コンパイラはそれを見つけることができます。また、必要なアセンブリがコンパイラにある場合GAC、コンパイラはそれを見つけます。

の前に実行されるResolveAssemblyReference MSBuildタスクがC# compiler必要なアセンブリを見つけ、それを参照する必要がない場合があります。

于 2013-10-10T07:06:13.900 に答える