System.Reflection.Assembly.LoadFile锁定文件

Ada*_*lor 38 asp.net reflection plugins

我正在加载一个DLLvia System.Reflection.Assembly.LoadFile并在一个插件式系统中反映它的成员.我需要能够DLL在系统运行时更新/覆盖这些,但看起来在调用System.Reflection.Assembly.LoadFile文件后随后被锁定.
有谁知道解锁文件的方法?
我已阅读有关在单独的应用程序域中加载文件的信息?这种方法有什么缺陷吗?

Pon*_*dum 69

如果你使用这个:

 System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path))
Run Code Online (Sandbox Code Playgroud)

它不会锁定文件.

编辑


虽然这是有效的,但它不是最好的解决方案,但更好的方法是更多地涉及(太多了,只是为此粘贴所有代码).

我在Github上创建了一个公共存储库,其中包含正确执行此操作的所有代码:

使用卷影复制加载装配而不锁定.

  • 这种方法的缺点可能是您无法从内存中"卸载"程序集,这意味着每次更新DLL并重新加载时,最终会在内存中使用另一个副本.AppDomain方法有点谨慎,并且具有(轻微的)性能,但它确实意味着您可以在不再需要时卸载AppDomain. (7认同)