c# - 如何将 AppDomain.CreateDomain 与 AssemblyResolve 一起使用?

标签 c# oop c#-4.0 applicationdomain

我想使用内存从 WCF 加载我的程序集。一切正常 时间:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
Assembly[] assBefore = AppDomain.CurrentDomain.GetAssemblies();
foreach (byte[] binary in deCompressBinaries)
    loadedAssembly = AppDomain.CurrentDomain.Load(binary);

但我想使用 AppDomain.CreateDomain,而不是当前域:

protected void LoadApplication()
{
    this.ApplicationHost = AppDomain.CreateDomain("TestService", null, new AppDomainSetup
    {
        ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
    });

    ApplicationHost.AssemblyResolve += new ResolveEventHandler(OnAssemblyResolve);
    foreach (AssemblyName asmbly in System.Reflection.Assembly.GetExecutingAssembly().GetReferencedAssemblies())
    {
        ApplicationHost.Load(asmbly);
    }
    List<byte[]> deCompressBinaries = new List<byte[]>();
    foreach (var item in AppPackage.Item.AssemblyPackage)
        deCompressBinaries.Add(item.Buffer);
    var decompressvalues =  DeCompress(deCompressBinaries);
    deCompressBinaries.Clear();
    deCompressBinaries = decompressvalues.ToList();

    foreach (byte[] binary in deCompressBinaries)
        ApplicationHost.Load(binary);

    Assembly[] assAfter = AppDomain.CurrentDomain.GetAssemblies();
}

Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
    return Assembly.Load(args.Name);
}

我有两个类库,ClassLibrary1 和 ClassLibrary2,使用以下内容:

namespace ClassLibrary2
{
    public class Class1 : MarshalByRefObject
    {
        public Class1()
        {

        }

        public int GetSum(int a , int b)
        {
            try
            {
                ClassLibrary1.Class1 ctx = new ClassLibrary1.Class1();
                return ctx.Sum(a, b);
            }
            catch
            {
                return -1;
            }
        }

        public int GetMultiply(int a, int b)
        {
            return a * b;
        }
    }
}

类库 2 依赖于类库 1。所以我正在使用 assemblyresolver。但是我在 ApplicationHost.Load(binary); 上遇到错误:

Error: Could not load file or assembly 'ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

它也不是 FIRING ASSEMBLYRESOLVER。我的光标不会转到 Assemblyresolver 方法。如何将 AppDomain.CreateDomain 与 resolve 方法一起使用?

最佳答案

我个人不喜欢从字节数组加载程序集。我认为最好将程序集保存到一个临时文件夹,然后从该文件夹加载它们。看看这篇文章: Application Domains is hard… .

关于c# - 如何将 AppDomain.CreateDomain 与 AssemblyResolve 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9721686/

相关文章:

c# - 具有不同文件的 LINQ to XML

c# - SqlBulkCopy 上传Excel

c# - SyncRoot 如何/为什么隐藏在 Queue<T> 上?

c# - 首先使用实体​​框架代码为存储库实现通用方法

c# - ASP.NET Core 2.1 代码生成错误 - 找到多个相同类型的自定义属性

c# - 通过缓存或委托(delegate)调用提高性能?

c++ - 使用共享指针释放类中的资源

java - 如何在 Java 中复制列大小未知的二维数组?

java - 从干净代码的角度来看,为什么我们应该避免定义具有三个以上参数的方法?

wcf - 尝试调用 WCF webservice 4.0 时获取返回类型无效错误