1. ホーム
  2. c#

[解決済み] 参照されるすべてのアセンブリをアプリのドメインに強制的に読み込ませる方法はありますか?

2023-04-14 12:04:25

質問

私のプロジェクトはこのように設定されています。

  • プロジェクトの定義。
  • プロジェクト"インプリメンテーション"
  • プロジェクト "消費者"

プロジェクト "Consumer" は "Definition" と "Implementation" の両方を参照しますが、 "Implementation" ではどの型も静的に参照しません。

アプリケーションが起動すると、Project "Consumer" は "Definition" の静的メソッドを呼び出し、このメソッドは "Implementation" で型を検索する必要があります。

パスや名前を知ることなく、そしてできれば本格的な IOC フレームワークを使用することなく、参照されるアセンブリを App Domain に強制的にロードする方法はありますか?

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

これで解決したようです。

var loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
var loadedPaths = loadedAssemblies.Select(a => a.Location).ToArray();

var referencedPaths = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, "*.dll");
var toLoad = referencedPaths.Where(r => !loadedPaths.Contains(r, StringComparer.InvariantCultureIgnoreCase)).ToList();

toLoad.ForEach(path => loadedAssemblies.Add(AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(path))));

Jon が指摘したように、理想的なソリューションは、読み込まれた各アセンブリの依存関係に再帰する必要がありますが、私の特定のシナリオでは、それを心配する必要はありません。


更新しました。 .NET 4に含まれるManaged Extensibility Framework (System.ComponentModel) には、このようなことを達成するためのより良い設備があります。