2009-06-23 81 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);