4

私はいくつかの DLL バージョン、ポリシー ファイル、および GAC 内のアイテムに関する非常に「奇妙な」問題に取り組んできましたが、私の人生では、どのように/なぜ . NET フレームワークは、プロジェクト参照をバインドするときに実行するアセンブリを選択します。

まず、私たちが持っているものの歴史を少し説明すると、次の情報を含む 2 つのライブラリ DLL ファイルがあります。

ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1234
ApplicationAssembly.dll - .NET 1.1 code - .dll Version 01.01.00.1244
ApplicationAssembly.dll - .NET 2.0 code - .dll Version 02.00.00.1111

これらの各アセンブリは GAC に読み込まれ、1.1 および 2.0 バージョンにはそれぞれ、読み込む最新バージョンを指定するポリシー ファイルがあります。

ApplicationAssembly.dll ファイルの 1.1.00.1234 バージョンを参照するプロジェクトがありますが、プロジェクトが移動され、ヒント パスが無効になりました。ただし、参照は死んでいませんが、アセンブリの意図した 1.1 バージョンではなく、02.00.00.1111 バージョンに表示されています。

このプロセスはどのように決定され、なぜすぐに 2.0 フレームワークに移行したのですか? 「特定のバージョン」参照であることを指定すると、ヒントパスが正しくなくても適切な DLL が検出されますが、将来的に問題が発生するリスクがあるため、その設定をオンのままにしておくことはできません。

問題は、なぜこれが起こるのかということだと思います。 また、.NET はアセンブリの場所をどのように決定するのでしょうか?

4

1 に答える 1

3

Fusion (.Net のマネージ dll ロード機能) が dll を見つけるために使用するルールは非常に広範です (Gac/厳密な名前/カスタム ロード フックが原因で、いくつか挙げることができます)。

公式のルールはここで大まかに扱われ ます。あなたのライブラリは強力な名前が付けられているため、より複雑なルールが適用されます。

于 2009-01-28T22:40:27.377 に答える