Assembly下有LoadFile,LoadFrom等方法能夠加載程序集。spa
LoadFile只加載你給定路徑的那個dll,LoadFrom會自動加載依賴的dll。code
如:A依賴B,LoadFile(「A」)只會加載A,不會加載B,以後運行A的方法可能會致使報錯。繼承
LoadFrom(「A」)則會自動加載A和A的依賴,以後調用就不會報錯了string
可是若是想要加載進來的程序集還可以卸載掉,就不能用這樣的方法了。it
須要用到AppDomain.CreateDomain這樣的sandbox型的方法,在以後,再把Create出來的這個AppDomain,Unload掉class
首先,須要繼承MarshalByRefObject寫一個類 命名空間
在此類中寫一個Load方法程序
public class Sandbox : MarshalByRefObject { public void Load(string path) { Assembly.LoadFrom(path); } }
以後,在住程序中
var ad = AppDomain.CreateDomain("new"); Sandbox sandbox = (Sandbox)ad.CreateInstanceFromAndUnwrap(@"sandbox所在程序集", "命名空間.Sandbox"); sandbox.Load(path);
此時,主程序域中,並無任何你剛剛加載進來的程序集信息,若是須要調用裏面的方法,你一樣須要經過sandbox去調用。方法
因此sandbox能夠增長調用的方法。只有在sandbox中,才能訪問當相關的程序集信息。nw
最後使用
AppDomain.Unload(ad);卸載掉