C# 如何将带有DLL的应用程序从内存加载到AppDomain并执行它?

C# 如何将带有DLL的应用程序从内存加载到AppDomain并执行它?,c#,assemblies,appdomain,C#,Assemblies,Appdomain,我有几个带有程序集及其使用的DLL的流。如何将它们加载到AppDomain并执行主程序集?如果可以避免的话,我宁愿不将文件保存到磁盘。您可以使用以下机制获取程序集 Assembly myAssembly = Assembly.Load(<your raw file stream>); 不幸的是,程序中加载的任何类型都会在这里结束,因此您可能希望构建一些缓存机制来存储类型信息我刚刚尝试了它,但它没有调用处理程序。相反,当我调用加载并实例化的主程序集的main方法时,它会崩溃。(Tar

我有几个带有程序集及其使用的DLL的流。如何将它们加载到AppDomain并执行主程序集?如果可以避免的话,我宁愿不将文件保存到磁盘。

您可以使用以下机制获取程序集

Assembly myAssembly = Assembly.Load(<your raw file stream>);

不幸的是,程序中加载的任何类型都会在这里结束,因此您可能希望构建一些缓存机制来存储类型信息

我刚刚尝试了它,但它没有调用处理程序。相反,当我调用加载并实例化的主程序集的main方法时,它会崩溃。(TargetInvocationException:IOException:找不到资源“mainwindow.xaml”。)当我直接加载应用程序时,该应用程序运行正常。如果程序集具有嵌入资源,则此操作将不起作用,因为在上述代码中只执行了类型解析。如果您可以移动这些资源,它应该可以正常工作。或者,您可以使用Assembly.GetManifestResourceInfo单独从此程序集中获取资源。我在代码中添加了资源解析,但该处理程序仅针对加载程序集中的资源调用。此外,程序集资源中似乎缺少异常中的xaml文件。(我正在使用GetManifestResourceNames()列出资源。)
AppDomain.CurrentDomain.TypeResolve += new ResolveEventHandler(CurrentDomain_TypeResolve);

static Assembly CurrentDomain_TypeResolve(object sender, ResolveEventArgs args)
    {
        Type  resolvedType =  myAssembly.GetType( args.Name, false);
    }