【问题标题】:Load and execute code from an assembly without locking the file?从程序集中加载和执行代码而不锁定文件?
【发布时间】:2010-05-22 00:22:30
【问题描述】:

有没有办法从磁盘加载程序集并在其中执行代码,而不会将文件锁定在磁盘上?我一直不明白为什么需要锁定文件,因为代码将加载到 RAM 中并通过 JIT 编译?

【问题讨论】:

  • 这几乎只是一个标准的操作系统功能,用于锁定进程使用的基于文件的资源
  • @Pierreten:在 Unix 中,您可以在共享库正在使用时取消链接和替换它们。因为现有进程有一个打开的文件句柄,所以在每个使用原始 .so 文件的进程终止之前,底层的 inode 都不会被获取。

标签: .net assemblies


【解决方案1】:

您正在寻找的是所谓的卷影复制。您必须创建一个新的AppDomain 并提供一个AppDomainSetup 实例,并将属性ShadowCopyFiles 设置为字符串true

此应用程序域将在加载程序集之前将程序集复制到临时位置。有关详细信息,请参阅MSDN

【讨论】:

    【解决方案2】:

    有可能,您也可以使用Assembly.Load(byte[]) 来加载程序集。该程序集没有“加载上下文”,您可以重复加载它。然而,管理这件事并不容易,你一定会发现的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2023-03-28
      • 2011-09-07
      • 2017-12-14
      相关资源
      最近更新 更多