2014-03-02 79 views
0

我試圖組件加載到一個新的領域, 但我不斷收到一個錯誤,指定的文件不能被發現,與引用的DLL

注意裝載程序集,我有一個名爲「擴展」目錄包含文件夾「檢查」裏面包含了一些DLL的

的「System.IO.FileNotFoundException:未能加載文件或程序集‘InspectBLL,版本= 1.0.0.0,文化=中立,公鑰=空’」 我目前做以下工作

public AppDomain GetAppDomain(DirectoryInfo dir, string domainName) 
    { 
     var assemblydll = dir.GetFiles().FirstOrDefault(x => x.Name.Contains("ServerDLL")); 
     AppDomainSetup domaininfo = new AppDomainSetup(); 
     domaininfo.ApplicationBase = dir.FullName; 
     AppDomain domain = AppDomain.CreateDomain(domainName, null, domaininfo); 
     foreach (var item in dir.GetFiles()) 
     { 
      var bytes = File.ReadAllBytes(item.FullName); 
      domain.Load(bytes); 
     } 
     return domain; 
    } 

我發現的新信息,似乎它正在尋找.exe所在的DLL,這是不好的。 (我coppied的dll文件exe文件的所有工作,但我需要它是在文件夾擴展\檢查)

+0

解決這個問題那麼什麼文件被它試圖加載?你有沒有試過在線搜索錯誤?你能迴應item.fullname並檢查它存在嗎? –

+0

它確實存在,因爲我使用DirectoryInfo,我確實檢查了哪個文件,並且該文件確實存在於文件夾中,Im編輯帖子以獲取更多信息 –

+1

使用Assembly.Load(byte [])通常是一個非常糟糕的主意,程序集在沒有加載上下文的情況下被加載所以CLR在查找相關程序集時會遇到很多麻煩。它當然不會知道這樣的程序集也存在於* dir *中。除*不*執行此操作外,請使用Fuslogvw.exe解決程序集解析問題,AppDomain.AssemblyResolve可幫助CLR找到它們。 –

回答

1

我設法與

AppDomain.CurrentDomain.AssemblyResolve