霧を脇に置き、本質を見ます
問題は、問題がある理由を理解するようになるまで
あなたはこの問題に対する簡単な解決策が必要な場合は、そのエラーに直接コピーBaiduは、多くの、多くのソリューションとなります
あなたは、なぜこのエラーを理解したい場合
1、まず、反射のメカニズムを理解します
.dllファイルを完了した後に生成されます任意のライブラリのコンパイラは、.dllは反射がどこ現在の.dllからの反射(DBZQ.Answer.Factory.dll)ファイルを見つけることです
2は、我々はコードやプログラムファイルを見ます
web.configファイル
DalFacotyコード
私たちは、ウェブ層のbinディレクトリで見つけるすべてのアセンブリを見て
それは見るのは簡単だ、ウェブの下のbinディレクトリがDBZQ.Answer.Dal.dllませんでした
3、なぜDBZQ.Answer.Dal.dllありませんか?
私たちは、ウェブ/ binにdllファイルをたくさん見つけることができ、ファイルではありませんDBZQ.Answer.Dal.dll
なぜ?
どのように多くの層のプログラムを見てみましょう
そして慎重にDLLファイルを比較し、発見した唯一の9のdllファイル、2以下(DBZQ.Answer.TestとDBZQ.Answer.Dal)
DBZQ.Answer.Testはちょうど私が通常、試験レベルと呼ばれていない層とのプロジェクトを作成し、テストを行い、その関係を引用しますか?
その後、我々はそれがより近い関係管理呼び出します
直接または間接的に、ウェブ層を見つけることは困難ではない、すべての参照は、私たちが大胆に推測することができダル層を除き、すべての層は、関係を挙げることができます
スマイルは、これは難しい何ですか?その後、私は一つのことをやります
そして、再構築ソリューション、オープンなウェブ/ binに
ああ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~????????
物事が私はしなかった、思ったほど単純ではないようだDBZQ.Answer.Dal.dll
さて、なぜ他の層では、Web層への間接参照が.dllファイルを表示されることがありますか??そしてないDAL層
間接参照以来、私たちは層に、最初の間接参照工場ダル層を試して直接参照しないこと
ソリューションのリビルド
看来还是老大的引用最顶用
那这是为什么呢?为什么间接引用又不行了呢?
仔细思考之下我想到了一个问题,就是我其他的间接引用都是真正的要引用,因为我要用到其他层的函数所以我要引用
并不只是添加一个引用,而是引用加调用
那我们再来尝试一下,先取消web层对dal层的引用
然后同样是工厂类,添加对Dal层的引用,重新生成解决方案
ok,不存在,我们尝试着在DalFactory中声明一个Dal层的对象试一下
重新生成解决方案!!!
果然出现了
看来这个就是编译机制的问题,如果是直接引用,所引用的dll文件会直接出现在bin目录下,
如果是间接引用,必须要有明确的调用代码,才会将dll文件添加到bin文件加的目录下,
接下来说一下问题最开始的解决方案,就是缺少dll文件造成的
1、右键dal层,属性-->生成-->输出路径 改为web/bin
2、将dal/bin/debug下的dll文件和pdb文件复制到web/bin
3、web直接添加对dll文件的引用(因为层和层之间的调用关系原因、我个人感觉不太好,仅仅只是个人感觉)
虽然只是一个小问题,百度一搜也很快可以解决,但是我还是想说一句
解决问题要明白问题为什么会出现,只有不断的探索才能成长