gpt4 book ai didi

C# - 从另一个 AppDomain 中的方法返回值

转载 作者:行者123 更新时间:2023-11-30 19:06:16 25 4
gpt4 key购买 nike

在我的场景中,我通过 C# 代码中的操作将 DLL 添加到 GAC。然后我需要对新添加的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com