2010-02-24 33 views
0

下面是使用Assembly.ReflectionOnlyLoadFrom場景的不同版本的依賴關係:不能反映在組件共享

我的兩個組裝視察和我的倒影應用督察參考大會依賴

如果督察引用依賴1.0.0.0檢查引用依賴1.1.0.0督察不能反映在任何類型或方法在檢查使用類型從依賴關係。這種類型被擊中的那一刻,我得到:

System.IO.FileLoadException:無法 加載文件或程序集的依賴, 版本= 1.1.0.0,文化=中立, 公鑰=空'或一個其 依賴關係。找到的程序集 清單定義不匹配 集引用。 (異常來自HRESULT :0x80131040)

然而,督察可以反映過來依賴1.1.0.0本身就好了,所以加載依賴1.1.0.0大會。 ReflectionOnlyLoad從確實已在使用的程序集中工作依賴關係1.0.0.0

這裏是我用來加載程序集,並預裝它的依賴代碼:

var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath); 
foreach (var assemblyName in assembly.GetReferencedAssemblies()) { 
    Assembly.ReflectionOnlyLoad(assemblyName.FullName); 
} 

這不是與相關的問題1.1.0.0沒有得到解決,因爲我已經設置斷點在foreach中,並確認它已加載並且還檢查AppDomain.CurrentDomain.ReflectionOnlyGetAssemblies()的存在。它裝好了。但是,當我然後做assembly.GetTypes(),它死亡。

有什麼我能做到這一點,還是我必須反映過來在一個單獨的AppDomain和馬歇爾的元數據備份到具有以依賴1.0.0參考的AppDomain的組件。0

回答

0

Customizing the .NET Framework Common Language Runtime中,解釋了Load和LoadFrom爲加載的程序集創建了單獨的「作用域」,我想這可以解釋這個問題。 需要嘗試的是自己找到程序集並使用LoadFrom加載它們。

您是否嘗試過處理AppDomain.AssemblyResolve事件?

+0

我嘗試了AppDomain.AssemblyResolve和AppDomain.ReflectionOnlyAssemblyResolve,都沒有開除。我認爲這是因爲它已經加載了不同的版本。我會看看我是否只能使用LoadFrom。 – 2010-02-24 15:35:15

+0

原來這是使用LoadFrom加載依賴項的問題。我最初的測試失敗,但由於其他原因。現在都好。 – 2010-02-26 06:21:08

+0

第二個想法是有道理的,因爲有.NET加載的DLL本身,這是用Load而不是LoadFrom完成的。所以,正確的建議應該是嘗試和沒有LoadFrom – Timores 2010-02-26 06:46:34