2009-10-22 45 views
16

私は3つのプロジェクト(GUI、BL、DAL)を持つソリューションを持っています。 DALアセンブリは、GACに署名され、展開されます。.NETアセンブリのロード優先度

ソリューションをビルドすると、DALがコンパイルされ、アセンブリがメインプロジェクトのbinフォルダに配置されます。しかし、アプリケーションを実行すると、ローカルのものではなくGACのバージョンが読み込まれます。どうしてこれなの?

GACのバージョンが最新のものではなく、いくつかの方法が欠けていたので、それはうまくコンパイルされました。

GACがローカルのbinフォルダよりも優先されていますか?

事前に

答えて

19

短答はいの場合、GACはローカルファイルよりも優先されます。
これは、私たちがネイティブのdllの世界で使用していたものとは異なる動作です(システムのDLLの中には、何があっても常にSYSTEM32からロードされるものは除きます)。

なぜですか?
同じアセンブリで複数のアプリケーションがあるとしたら、そのアセンブリにはバグがあります。すべてのアプリケーションをどのように修正するのですか? すべてのドライバのすべてのアプリケーションの検索を開始するのは難しく、単一のアセンブリをGACに簡単に展開すると、すべてのアプリケーションを一度に修正できます。

あなたの問題としては、APIを変更する場合、そのアセンブリのアセンブリバージョンを変更する必要があります。この方法で、フュージョンエンジンはローカルフォルダにあるバージョンを選択します。

+0

答えのためのTks、特にバージョン管理についての最後の部分です。 – Dante

7

はいはい、GACを確認します。ローディングルールはhereと記載されています。問題を解決するには、APIを変更する際にアセンブリバージョンを更新する必要があります。

+0

リンクのTksは非常に便利です! – Dante