2010-10-01 21 views
0

我試圖在.Net中開發一個插件體系結構。該應用程序將是一個.Net應用程序。將會有保存插件的目錄。每個目錄將代表一個插件。每個插件目錄也包含所有依賴項dll。插件需要存儲在單獨的AppDomain中,因爲插件可能使用相同的程序集,但版本不同。子AppDomain(.Net)中的後期綁定

因爲它通過foreach循環在初始化()迭代,得到了一個 System.IO.FileNotFoundException:未能加載文件或程序「[大會名稱],版本= 1.0.0.0,文化=中性公鑰= null'或它的一個依賴關係。該系統找不到指定的文件。對於不在主項目中的程序集,在_apDomain.Load()中爲

代碼:

readonly private AppDomain _appDomain; 
    internal ItemModuleAppDomain() 
    { 
     AppDomainSetup info = AppDomain.CurrentDomain.SetupInformation; 
     _appDomain = AppDomain.CreateDomain("ChildDomain"); 
    } 

    public void Init(string dllDir) 
    { 
     string[] dlls = Directory.GetFiles(dllDir, "*.dll", SearchOption.TopDirectoryOnly); 
     foreach(string dll in dlls) 
     { 
      _appDomain.Load(AssemblyName.GetAssemblyName(dll)); 
     } 

任何想法,爲什麼?我嘗試了幾種方法,例如將程序集讀取爲要加載的字節數組。

回答

0

我相信AppDomain.Load可能是您的目的錯誤的方法 - 它將程序集加載到當前應用程序域和目標域中。而且你得到一個錯誤,因爲你的程序集位於一個子文件夾中,.NET不知道它。您必須在配置中提供私有路徑(http://msdn.microsoft.com/en-us/library/15hyw9x3.aspx)。您還可以使用AssemblyResolve或AppDomain的TypeResolve事件進行解析。

您還應該看看AppDomain.CreateInstanceFrom方法來加載您的主要插件類型(幷包含程序集)。

+0

謝謝。我們最終強烈命名了這些dll,因此我們可以將它們加載到同一個AppDomain中。 – Anish 2010-10-29 16:46:10