C# 动态程序集加载,内存问题

C# 动态程序集加载,内存问题,c#,.net,dll,.net-assembly,C#,.net,Dll,.net Assembly,我可能需要多次动态加载同一个程序集。我的问题是: 程序集实际上只加载一次还是多次?作为DLL的程序集本身建议使用第一个选项,但谁知道呢:) 我有一个经验,从同一个程序集实例化的相同类型,但从两个不同的位置动态加载的类型是不兼容的。从同一位置加载此组件两次是否也是如此 不能将同一程序集多次加载到同一应用程序域中,除非该程序集已更改,否则也没有太大意义 如果确实要重复加载程序集,则需要将其加载到其他appdomain中,然后卸载appdomain以卸载程序集。原因是没有明确的方法卸载程序集,只有ap

我可能需要多次动态加载同一个程序集。我的问题是:

  • 程序集实际上只加载一次还是多次?作为DLL的程序集本身建议使用第一个选项,但谁知道呢:)
  • 我有一个经验,从同一个程序集实例化的相同类型,但从两个不同的位置动态加载的类型是不兼容的。从同一位置加载此组件两次是否也是如此

  • 不能将同一程序集多次加载到同一应用程序域中,除非该程序集已更改,否则也没有太大意义


    如果确实要重复加载程序集,则需要将其加载到其他appdomain中,然后卸载appdomain以卸载程序集。原因是没有明确的方法卸载程序集,只有appdomain。

    不能将同一程序集多次加载到同一应用程序域中,除非该程序集已更改,否则也没有什么意义

    如果确实要重复加载程序集,则需要将其加载到其他appdomain中,然后卸载appdomain以卸载程序集。原因是没有明确的方法卸载程序集,只有appdomain。

    这取决于程序集加载的加载上下文。苏珊娜·库克(Suzanne Cook)在其博客中详细阐述了这个概念,这是一个很难用如此简单的答案来解释的100美元单词。简而言之,上下文允许CLR确定程序集是否在加载之前加载,以及应该在何处查找依赖程序集

    更容易解释什么会出错。
    Assembly.LoadFile()
    Assembly.Load(字节[])
    加载没有上下文的程序集。奇怪的是,这允许一个程序集被多次加载,因为CLR无法确定由它们加载的程序集之前是否已加载。对于LoadFile(),这是有意的,在您希望允许再次加载程序集的特定情况下。对于Load(字节[]),这是不可避免的事故,CLR对程序集的标识了解不够,因为它无法知道其显示名称

    这几乎总是不好的,在.NET中,类型的标识不仅仅是名称空间名+类型名,还包括从中加载类型的程序集。您往往很难诊断InvalidCastException,其内容类似于“无法将Foo.Bar类型的对象强制转换为Foo.Bar类型”。这导致了在试图弄清楚这意味着什么以及是什么原因时,一束束头发丢失了

    注意Assembly.LoadFile(),它的名称看起来太天真了,而且很少执行您希望它执行的操作。改为使用LoadFrom()。加载(字节[])同样是危险的,是正确安装程序的一个很差的替代品。

    它取决于程序集加载的加载上下文。苏珊娜·库克(Suzanne Cook)在其博客中详细阐述了这个概念,这是一个很难用如此简单的答案来解释的100美元单词。简而言之,上下文允许CLR确定程序集是否在加载之前加载,以及应该在何处查找依赖程序集

    更容易解释什么会出错。
    Assembly.LoadFile()
    Assembly.Load(字节[])
    加载没有上下文的程序集。奇怪的是,这允许一个程序集被多次加载,因为CLR无法确定由它们加载的程序集之前是否已加载。对于LoadFile(),这是有意的,在您希望允许再次加载程序集的特定情况下。对于Load(字节[]),这是不可避免的事故,CLR对程序集的标识了解不够,因为它无法知道其显示名称

    这几乎总是不好的,在.NET中,类型的标识不仅仅是名称空间名+类型名,还包括从中加载类型的程序集。您往往很难诊断InvalidCastException,其内容类似于“无法将Foo.Bar类型的对象强制转换为Foo.Bar类型”。这导致了在试图弄清楚这意味着什么以及是什么原因时,一束束头发丢失了

    注意Assembly.LoadFile(),它的名称看起来太天真了,而且很少执行您希望它执行的操作。改为使用LoadFrom()。加载(byte[])同样是危险的,是正确安装程序的一个很差的替代品。

    “我可能需要多次动态加载同一个程序集。”-为什么?“从两个不同位置动态加载的类型不兼容”-你的意思是什么,为什么?可能重复“我很可能需要多次动态加载同一程序集”-为什么?“从两个不同位置动态加载的类型不兼容”-您的意思是什么,为什么?可能重复