1. ホーム
  2. .net

[解決済み] .NETアセンブリのLoadFileとLoadFromの違い?

2022-06-28 21:49:18

質問

msdn のドキュメントを見ていたのですが、まだ少し混乱しています。 LoadFileLoadFrom を使用すると、アセンブリをロードするときに どなたか、よりよく説明するための例やアナロジーを提供していただけませんか。MSDNドキュメントではもっと混乱しました。また ReflectionOnlyLoadFrom と同じなのでしょうか? LoadFrom と同じですが、リフレクションモードでのみアセンブリをロードします。

私の.NETの経験は最高ではないので、LoadFileを使用するMSDNドキュメントに関するいくつかの質問をします。

1) それは何を意味するのでしょうか。 LoadFile は、同じ ID を持つが異なるパスに配置されたアセンブリを検証しますか? ID(例)とは何ですか?

2) それは LoadFile は 'LoadFrom Context' にファイルをロードせず、ロード パスを使用して依存関係を解決しません。 これは何を意味するのでしょうか。どなたか例を示していただけませんか。

3) 最後に、それは次のように述べています。 LoadFile は、LoadFrom が同じ ID で異なるパスを持つアセンブリをロードできないため、この限定されたシナリオで有用であると述べています。

どのように解決するのですか?

これでスッキリしましたか?

// path1 and path2 point to different copies of the same assembly on disk:

Assembly assembly1 = Assembly.LoadFrom(path1);
Assembly assembly2 = Assembly.LoadFrom(path2);

// These both point to the assembly from path1, so this is true
Console.WriteLine(assembly1.CodeBase == assembly2.CodeBase);

assembly1 = Assembly.LoadFile(path1);
assembly2 = Assembly.LoadFile(path2);

// These point to different assemblies now, so this is false
Console.WriteLine(assembly1.CodeBase == assembly2.CodeBase);


編集 : あなたが修正した質問で提起した質問に答えるために、あなたは間違いなく、次の文章を読みたいと思います。 スザンヌ・クック、アセンブリ・アイデンティティについて .

アセンブリがどのようにロードされるかを制御する多くのルールがあり、そのうちのいくつかは依存関係をどのように解決するかに関係しています。アセンブリAがアセンブリBに依存している場合、.NET はどこでアセンブリBを探すべきでしょうか?グローバルアセンブリキャッシュ、アセンブリAを見つけたのと同じディレクトリ、あるいはまったく別の場所でしょうか。さらに、そのアセンブリの複数のコピーを見つけた場合、どのように使用するアセンブリを選択する必要がありますか?

LoadFrom は一組のルールを持っていますが LoadFile には別のルールがあります。を使う理由はあまり想像がつきません。 LoadFile を使う多くの理由を想像するのは難しいですが、 同じアセンブリの異なるコピーでリフレクションを使う必要がある場合、 それはあなたのためにあります。