フュージョンアセンブリローダーはどのDLLバージョンをロードするかをどのように決定しますか
-
21-12-2019 - |
質問
物を単純に保つ、想定はローカルフォルダにDLL、または関係ファイルが含まれていない、またはパブリッシャポリシー、またはカスタム解決にはありません。参照されているDLLが参照されている唯一の場所はGACにあります。
GAC内のDLLのバージョンをどのように決定します(他のすべてのものが等しい)、優先順位は何ですか?
例えばプロジェクトでは、DLLはバージョン10.5.0.0のDLLを参照しています。バージョン10.5.0.0または10.5.1.0のDLLを選択しますか。あるいは、GACにバージョン10.4.0.0しか持っていない場合は、それが機能したりエラーを投げたりしますか?変更されたメジャー/マイナー/ビルド/リビジョンパーツであるかどうかによって、これらの規則は変更されますか?
プロジェクト参照「固有のバージョン」がTrueまたはFalseに設定されている場合はどうやって異なりますか?
および参照がDLL参照またはプロジェクト参照の場合、これはどのように異なりますか?
これがどのように機能するかを述べるMSDNウェブサイトがあると思いますが、見つけられないようです。私は振る舞いを上書きしようとしていません、私はただデフォルトの動作が何であるか知りたいです。
解決
MSDNに記載されているどのようにランタイムかアセンブリを見つけます。特にGACは、アセンブリが強い名前を使用してロードされている場合にのみ検索されます。別のアセンブリに「リダイレクト」があるが、整理された自動規則はなく、出版社のポリシーがあるかもしれません。
私の意見では、GACは.NET Frameworkのためにマイクロソフトで使用されるべきものだけであり、あなたはGACを使用せずにあなたのアプリケーションやライブラリを配布することによって多くの痛みを削除することができます(もちろん.NET Frameworkを除く) 。
アセンブリの特定のバージョンを参照することはビルドタイムプロパティであり、実行時の動作には影響しません。ただし、アセンブリ参照が実行可能ファイルにコンパイルされると、バージョンは実行可能ファイルに格納され、特定のバージョンがロードされている(アセンブリリダイレクトルールが適用された後)。
SO UPを昇降させるには:.NETが要求されたアセンブリの別のバージョンをロードするためには、アセンブリリダイレクトが適用されなければなりません。アプリケーションはapp.configファイルにリダイレクトを提供でき、GACは発行者ポリシーを持つことができます。