2

現在、リモート ストリームからアセンブリをバイト配列として取得しています。それを新しいAppDomainにロードする方法はありますか?

AppDomain.Load(byte[]) は FileNotFoundException を与えているため機能しません。アセンブリがコンピューター上にある必要があると思います。

        AppDomain domain = AppDomain.CreateDomain("Test");

        Thread t = new Thread(() =>
        {
            Assembly assembly = domain.Load(bytes);
            MethodInfo method = assembly.EntryPoint;
            if (method != null)
            {
                object o = assembly.CreateInstance(method.Name);
                try
                {
                    method.Invoke(o, null);
                }
                catch (TargetInvocationException ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
        });
        t.Start();
4

1 に答える 1

1

そのバイト配列を新しい AppDomain で実行されているコードに渡し、そのデータに対してLoad(byte[])を呼び出す必要があります。

アセンブリの読み込みと同様に、さまざまな方法でアセンブリを読み込むときに依存関係がどのように解決されるかを理解する必要があります。ほとんどの場合、依存関係を新しい AppDomain にプリロードするか、AssemblyResolver イベント ハンドラーを追加する必要があります。「C# LoadFrom Cook」を検索して、アセンブリの読み込みに関する Suzanne Cook による記事のセットを取得します。

于 2012-08-25T00:17:51.650 に答える