【问题标题】:Loading different assembly versions dynamically in .NET在 .NET 中动态加载不同的程序集版本
【发布时间】:2010-10-27 18:30:54
【问题描述】:

使用 System.Assembly.Load 还是使用 System.AppDomain.CurrentDomain.CreateInstanceFromAndUnwrap 将程序集直接加载到 AppDomain 更好?我对调用在同一进程中运行的同一程序集的不同版本特别感兴趣。我认为使用 CreateInstanceFromAndUnwrap 您的程序集必须具有 [serializable] 属性,但这是为什么呢?

编辑:我尝试加载的程序集与调用者不在同一位置。

【问题讨论】:

    标签: .net dynamic assemblies


    【解决方案1】:

    如果不是同一个位置,我猜你是指文件系统上的其他地方,如果不是,请告诉我。

    最好使用 System.Assembly.Load,因为它是通用的低级程序集加载器。

    另外,您提到想要加载不同的版本。为此,您必须设置辅助 AppDomain 以将程序集加载到其中,然后在完成后卸载该 AppDomain 并为新的程序集版本创建一个新的,因为 .Net 不支持从给定的程序集卸载应用程序域。

    CreateInstanceFromAndUnwrap 用于加载以某种方式“发送”给您的代码,因此它所处理的内容必须是可序列化的。

    【讨论】:

    • 如果您的程序集在名称中保留版本号,您将不会必须卸载前一个...尽管取决于您加载的程序集的数量,您的RAM 使用量将成比例增加...
    • 我认为您可以在同一个应用程序域中加载同一个程序集的两个版本...并不是说我曾经有过尝试的需要。
    • 根据this post,“...您应该能够将同一程序集的 2 个不同版本加载到同一个 AppDomain,如果程序集具有强名称(名称、版本、文化和公钥)。”虽然不是完全严格的文档。
    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多