2012-09-27 50 views
12

假設系統安裝了.NET 4.0和.NET 4.5。在.NET 4.0應用程序域中加載針對.NET 4.5的程序集

是否有可能加載和針對.NET 4.0編寫的組件與.NET 4.5裝配工作?

簡單地說,我可以調用Assembly.Load從.NET 4.0的代碼加載.NET 4.5靶組件?

+2

你會想讀此:http://marcgravell.blogspot.nl/2012/09/iterator-blocks-missing-methods-and-net.html過! – sehe

+0

爲什麼不調整其他項目的構建設置以使用.NET4.5? –

+1

@ShaunWilde有時候這是不可能的。您可以在一家公司擁有多個團隊或應用程序,一個擁有.NET 4.5,一個使用.NET 4.0。在理想的世界中,這不會發生,但在現實世界中,它經常發生。有時你需要在兩者之間進行互操作。 – Nuzzolilo

回答

11

假設系統如.NET 4.0和.NET 4.5:

marcgravell's blog指出由sehe

4.5鏈接是就地過度的頂部上的頂部4.0安裝,在GAC中;一旦你已經安裝了4.5,4.0運行與4.5組件

然後從瞄準4.0(由4.0編譯器編譯)一個.NET代碼調用Assembly.Load,將在實際使用4.5框架實現運行,所以我沒有看到它無法加載4.5程序集的任何原因。

margravell指出,當您嘗試只安裝4.0的系統上運行.NET 4.5編譯的代碼出現問題,作爲屈服回報執行/突破迭代導致缺少方法參考。但是這不應該影響你。

+4

它是如何在默認情況下不起作用的? - 你需要做些什麼才能使其發揮作用? – BrainSlugs83

+0

顯然.net-4.5在某些情況下嘗試表現得像.net-4.0一樣。例如,'System.ComponentModel.Composition'拒絕通過初始化爲.net-4.0的程序加載的.net-4.5程序集加載時關閉打開的泛型類型。這點點我,因爲我沒有意識到框架運行在.net-4.0模式,我無法猜測這可能是不同行爲的原因。 – binki

相關問題