2011-01-07 59 views
2

我們有一個程序集,我將調用引用第三方dll的COMPlusAssembly。 COMPlusAscel在COM +中託管並使用System.Enterprises.RegistrationHelper進行安裝。我們的客戶可能會也可能不會安裝在COMPLusAssembly中被引用的第三方軟件。在.NET 3.5中,當使用RegistrationHelper安裝COMPlusAssembly時,它甚至不會嘗試加載第三方DLL。現在我們已經升級到.NET 4.0,它正在加載程序集,並且在註冊期間拋出FileLoadException無法加載文件或程序集或其依賴項之一的錯誤。 .NET 4.0中的東西發生了變化,導致它加載了.NET 3.5中未加載的其他依賴項。我們的第三方程序集是一個.NET 2.0程序集。有沒有辦法告訴框架不加載依賴關係?NET 4.0在COM +中安裝程序集加載額外的依賴關係

謝謝!

-Tammy

回答

0

我真的沒有一個確切的答案,但(雖然它可能演變),但我有一些指針。

據我所知,依賴不會被加載(仍然在.Net 4.0中),直到它們被JITter需要。也許不知何故,之前延遲的代碼路徑現在被急切地打上JIT並且因此試圖加載依賴關係。

處理此問題的最好方法是在需要依賴關係的代碼路徑被JITted之前,通過使用AppDomain.Load手動接管加載和解析依賴項。然後您可以確定加載是否成功,如果不成功,則明確決定不執行現在不可用的代碼。

此外,由於您使用的是.NET 4.0中,您也可以考慮使用不同的方式使用被稱爲MEF類型解析框架,住在System.ComponentModel.Composition來滿足相關性。使用MEF,您可以輕鬆地加載和發現類型,然後自動將它們組合到依賴類型中。在這種情況下,在運行發現之後,您會發現依賴關係未得到滿足(可能屬性值仍然爲null),然後您可以採取適當的措施。

相關問題