我有一个场景,我从 C# 代码中的操作向 GAC 添加 DLL。然后我需要对新添加的 DLL 执行 Assembly.Load。但是,由于进程启动时 DLL 不在 GAC 中,因此它返回 null。
所以,我看到代码可以在不同的 AppDomain 中运行,这将导致 DLL 可以从单独的 AppDomain 中的 GAC 获得。
如何将来自其他 AppDomain 的值返回到我的主线程?
我只想运行:

var type = Assembly.Load(assembly).GetType(className);
并让它从另一个 AppDomain 返回到我的主线程。

最佳答案

您将不得不使用 .NET Remoting。在另一个 AppDomain 上加载的对象需要从 MarshalByRefObject 类 (http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx) 派生。

为了节省时间,这是该链接中的代码:

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain()
    {
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName);
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            Assembly.GetExecutingAssembly().FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

关于C# - 从另一个 AppDomain 中的方法返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12611296/

10-17 00:49