C# 如何将一个dll加载到ram中,并让另一个加载到ram中的dll访问它

C# 如何将一个dll加载到ram中,并让另一个加载到ram中的dll访问它,c#,.net,wpf,dll,C#,.net,Wpf,Dll,我有一个WPF桌面应用程序 我的想法是: 我安装的应用程序启动并连接到我的服务器 然后,客户端应用程序将我的视图和DLL逻辑/资源加载到RAM中 我就是这样做的: var uri = "http://127.0.0.1/Dll/MyControls.Dll"; var data = new System.Net.WebClient().DownloadData(uri); var ViewAssembly = System.Reflection.Assembly.Load(data); for

我有一个WPF桌面应用程序

我的想法是:

我安装的应用程序启动并连接到我的服务器

然后,客户端应用程序将我的视图和DLL逻辑/资源加载到RAM中

我就是这样做的:

var uri = "http://127.0.0.1/Dll/MyControls.Dll";
var data = new System.Net.WebClient().DownloadData(uri);
var ViewAssembly = System.Reflection.Assembly.Load(data);

foreach (Type type in ViewAssembly.GetExportedTypes())
{
    if (type.FullName.IndexOf(".Plugin") > 0)
    {
        dynamic obj = Activator.CreateInstance(type);
        UserControl wnd = obj.GetControl();
        MainContent.Children.Add(wnd);
        break;
    }
}

uri = "http://127.0.0.1/Dll/Biz.Dll";
data = new System.Net.WebClient().DownloadData(uri);
var DLLAssembly = System.Reflection.Assembly.Load(data);
Type myType = DLLAssembly.GetType("Biz.Logic");
现在,在我的“原始”应用程序中,我的视图将通过引用调用Biz.Dll中的逻辑

但在这种情况下,DLL加载到RAM中,而不是用户的硬盘驱动器中。 那么,我的视图(已经加载到RAM中)是否可以调用Biz.Dll(也加载到RAM中)中的方法,同时不将Dll写入用户的硬盘

我采用这种方法的原因是,我希望在任何用户的PC上都有一个小的物理占用空间,并控制对代码的访问。因此,每当用户启动应用程序时,它总是获得最新版本,我可以控制应用程序的注册

我知道我可以将所有主要逻辑移到我的服务器上,但我不想保护我的代码,而且我希望即使用户无法获得良好(即暂时中断)的互联网连接,应用程序仍能正常运行。我“缓存”来自客户端的所有服务器更新,并在有连接时更新

我可以重新设计代码以进行后期绑定调用,但我不知道这将如何与xaml中的绑定标记一起工作

欢迎提出任何方法/想法


如果在调用Activator.createInstance之前加载这两个程序集,将非常感谢。您的代码将正常工作。无论dll是从硬盘驱动器还是通过汇编.Load从字节数组加载,在运行时都没有区别,因此如果您事先知道所有依赖项,可以预加载所有依赖项


如果您不知道在运行时需要哪些程序集,您可以始终订阅事件并仅下载请求的dll。

您好,谢谢您的回答。这很有道理。我想我必须在DLL之间使用Kate绑定。谢谢:)