2009-06-23 84 views
33

我正在通过System.Reflection.Assembly.LoadFile加载DLL,并在插件式系统中反映它的成员。 我需要能够在系统运行时更新/覆盖这些DLL,但看起来在调用System.Reflection.Assembly.LoadFile后文件随后被锁定。
有谁知道解锁文件的方法吗?
我已阅读关于在单独的appdomain中加载文件?这种方法有没有陷阱?System.Reflection.Assembly.LoadFile锁定文件

回答

63

如果使用这样的:

System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(path)) 

它不会锁定该文件。

编辑


虽然这个工程,它不是最好的解决办法,但这样做的更好的方法是(只是这里粘贴所有的代码太多)了很多更复杂。

我已经创建了一个公共仓库在Github这里所有的代码做正确的:包含在微软的FxCop

Loading Assemblies without Locking by using Shadow Copying.

+0

真的吗?!?如果它工作的话,它会很酷! +1 – 2009-06-23 09:06:25

0

使用Microsoft.Cci

样品1.35版本:

using Microsoft.Cci; 
// [...] 
AssemblyNode assembly = AssemblyNode.GetAssembly(path);