關於c#動態加載程序集的一些注意事項

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);
卸載掉
相關文章
相關標籤/搜索