ホームページ > バックエンド開発 > C++ > アセンブリとその参照を別の AppDomain に再帰的に読み込む方法は?

アセンブリとその参照を別の AppDomain に再帰的に読み込む方法は?

Linda Hamilton
リリース: 2025-01-15 12:16:48
オリジナル
640 人が閲覧しました

How to Recursively Load Assemblies and Their References into a Separate AppDomain?

AppDomain での再帰参照を含むアセンブリの読み込み

アセンブリを別のアプリケーション ドメイン (AppDomain) に読み込む場合は、その参照も手動で読み込む必要があります。そうしないと、依存関係が欠落しているために FileNotFoundException エラーが発生する可能性があります。

アセンブリとそのすべての参照を再帰的に読み込むには、次のことをお勧めします。

<code class="language-C#">// 在当前 AppDomain 中创建一个代理类。
class Proxy : MarshalByRefObject
{
    public Assembly GetAssembly(string assemblyPath) => Assembly.LoadFile(assemblyPath);
}

// 创建一个新的 AppDomain。
AppDomain domain = AppDomain.CreateDomain("MyDomain", null, domaininfo);

// 在新的 AppDomain 中创建一个代理实例。
var value = (Proxy)domain.CreateInstanceAndUnwrap(
    typeof(Proxy).Assembly.FullName,
    typeof(Proxy).FullName);

// 使用代理将程序集加载到新的 AppDomain 中。
var assembly = value.GetAssembly(assemblyPath);

// 迭代程序集的引用并递归加载它们。
foreach (AssemblyName refAsmName in assembly.GetReferencedAssemblies())
{
    LoadAssemblyWithReferences(refAsmName, domain);
}</code>
ログイン後にコピー

LoadFrom() と LoadFile() を使用してアセンブリをロードします

LoadFrom() を使用してアセンブリを読み込むと、GAC または現在の AppDomain の bin フォルダーでアセンブリを検索しようとします。アセンブリがこれらの場所のいずれにもない場合、この操作は失敗する可能性があります。

対照的に、LoadFile() は特定のファイル パスからアセンブリを読み込みます。この方法では、すべての依存関係を手動でロードする必要があります。ただし、アセンブリのロード プロセスをより詳細に制御できます。

上記の手順に従って、アセンブリとそのすべての参照を別の AppDomain に再帰的に読み込むことができ、より分離され制御された実行環境が可能になります。

以上がアセンブリとその参照を別の AppDomain に再帰的に読み込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート