2012-03-29 47 views
5

如果我有一個在.NET 4中編譯的庫,並從.net 4.5可執行文件引用它,該庫的哪個版本的操作將在庫中執行的操作中執行?哪一個.net框架版本將運行在

我有一個cli應用程序,它建立在.net 4.5中,並引用.net 4和.net 4.5項目,並且我想知道是否兩者都使用相同版本的ADO.net組件。

回答

5

它們都將運行在相同的CLR(本例中爲4.5)。您可能會遇到同一個程序集的多個版本將被加載的情況(因此,ADO.NET可能會加載版本4.0,並在同一個應用程序域中加載4.5)。據我所知,他們要麼用CLR 4.0消除(或者至少使其發生的方式更少)。

編輯:順便說一句 - CLR(運行你的代碼的運行時)和正在加載的程序集版本是有區別的。

CLR的版本控制着進程的能力 - 它可以做什麼,它可以加載哪些版本的程序集。例如,CLR 4.5可以加載幾乎所有的程序集(1.0 - > 4.5)。他們都將在4.5 CLR下運行。最重要的是,您不能在同一個進程中從同一個compat樂隊運行兩個版本的CLR。 CLR 4.5和4.0都被認爲是相同的兼容頻段,因此無論哪一個都會加載。 CLR 1.0,1.1,2.0,3.0和3.5都被認爲是在同一個compat band中,所以只能加載其中的一個。但是,您可以同時加載CLR 3.5和CLR 4.5。

+0

我認爲,如果你引用一個針對不同框架的程序集,你會得到編譯錯誤。 – 2012-03-29 08:09:00

+1

只有存在二進制中斷時(這種情況很少或很少),或者如果您試圖引用一個指向更高級CLR版本的程序集(因此,引用4.0程序集的2.0程序集將會中斷,反之則不會) – 2012-03-29 08:10:26

+0

如果你指定一個不同版本的程序集,它也會中斷。例如,你有4.0中的程序集構建,並且你在web.config中指定(或者從它加載的任何地方)3.5 – Thea 2012-03-29 08:16:40

相關問題