下面是使用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?
我嘗試了AppDomain.AssemblyResolve和AppDomain.ReflectionOnlyAssemblyResolve,都沒有開除。我認爲這是因爲它已經加載了不同的版本。我會看看我是否只能使用LoadFrom。 – 2010-02-24 15:35:15
原來這是使用LoadFrom加載依賴項的問題。我最初的測試失敗,但由於其他原因。現在都好。 – 2010-02-26 06:21:08
第二個想法是有道理的,因爲有.NET加載的DLL本身,這是用Load而不是LoadFrom完成的。所以,正確的建議應該是嘗試和沒有LoadFrom – Timores 2010-02-26 06:46:34