2013-03-22 57 views
11

經歷了各種博客之後,我對「多目標」或並排執行的術語頗感困惑。.NET中的多目標處理

  1. 有些博客說,並行執行意味着在一個進程中的兩個版本的CLRs。其他一些人聲稱,它與.net 2.0和.net 3.0程序集並排執行。我非常失望,我不確定誰是對的誰是錯的。

  2. 我也在很多博客中看到過像Scott Hanselman的博客等(這讓很多人感到困惑),如果目標框架是4.0,.NET 4.5的任何功能都將不起作用。我可以同意。但我不能同意或理解這樣一個事實,即如果我使用4.5構建並在4.0中進行部署,那麼4.0中其bug修復爲4.5的特性將隱藏起來。在這裏,我不理解術語「隱藏」,沒有人敢解釋它的意思。這意味着運行時錯誤?這意味着編譯時錯誤?它不能是這個。這意味着不一致的行爲?異常?如果是這樣的話,我想知道爲什麼MS在VS中開發這種類型的靈活性。它是否有任何目的?我明白,第一種情況是有意義的,但不理解或同意第二種情況。

  3. 我還在Rick/Scott Hanselman的帖子中看到,主要變化意味着包括CLR在內的完整升級。然後,我應該看到3.0作爲主要升級,但不是它仍然使用.NET 2.0 CLR。那爲什麼命名術語是3.0.x.x/3.5.x.x?就像.NET 4.0.30319.x中CLR也是新的一樣,所以我同意這一點。我很驚訝誰是對的。無論是這些人或MSDN都違反其原則(如MSDN說格式爲Major.Minor.Build.Revision,Hanselman或其他人說,主要意味着CLR升級,雖然它不在.NET 3.0中)

編號:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

以上兩個問題有什麼想法?

回答

0

這是我的想法。 .NET已經通過多個版本和多個運行時發展。 .NET的新版本可能會或可能不會有新的運行時。

.NET 1.0附帶運行時。 NET 1.1是對現有系統的一系列修復和補充。這是一次增量升級。

因此,任何瞄準1.0的東西都將在1.1上無縫運行,因爲您不依賴那些修復的bug。

.NET 2.0是一個全新的運行時版本。 現在你的電腦可以同時安裝1.1和2.0 .. 1.1版應用將使用.NET 1.1運行時,2.0版本的目標應用將使用2.0版運行時..

事情變得有點複雜,3.0和3.5版本。他們可能包含一些修復(我認爲),但主要是,他們添加了一堆類到庫中,仍然使用相同的2.0運行時。

現在3.5定位應用程序仍然會使用.NET 2.0運行時,並將工作。他們不知道3.5中添加的新類(如:LINQ),他們不需要。

.NET 4.0又是一個全新的運行時。它可以與2.0和3.5並排安裝。而針對.NET 2.0的應用程序仍然需要並運行。NET 2.0運行時,而爲.NET 4.0編譯的新應用程序將使用新的運行時。有一些更改介紹瞭如何在.NET 4.0中找到程序集並將其加載到運行時,因此如果您只是編譯2.0應用程序以使用4.0,它可能會有一些問題。但它會工作,一旦你解決這些問題(如果有的話)

現在.. NET 4.5又是一個稍微不同的故事。這是一個新的運行時(AFAIK),但它取代了4.0。你不能讓4.0和4.5並行運行。現在,4.0版本的定位應用程序將運行在4.5運行時...這得到了一些修復應用。因此,如果您的應用程序依賴於4.0中提供的這些錯誤,那麼它將在4.5上遇到問題。

這是一個快速而骯髒的答案。如果您發現任何問題/不匹配/可能的改進,請隨時編輯。

HTH

0
  1. 並排側執行裝置在一個過程中的多個的CLR。因爲CLR是相同的,所以.NET2.5和.NET3.5並不是並排的。然而,.NET2和.NET4是。
  2. 你是什麼意思「在.NET4.5中構建並部署在.NET4.0中」?
  3. 你要求明確的技術區分是由微軟營銷決定的。
+0

Tormod,DLL Hell問題解決的含義是什麼?並行執行評估?我可以定位一個3.5或3.0或2.0框架程序集。彙編版本是戴爾地獄的解決方案?爲什麼所有這些術語都不清楚?我很好奇,究竟是什麼意思是通過並行執行來實現,無論CLR如你所說,還是在許多博客甚至是MSDN中所說的程序集。 – Learner 2013-03-22 12:00:46

+0

多重定位只意味着編譯一個特定的版本。與Tormod並列說實際上意味着運行時可以將多個版本的.NET加載到內存中並一起執行它們(想想:混合使用4.5 dll的2.0 dll) – Robert 2013-04-07 01:21:44

1

首先,您必須瞭解多目標和並行執行之間的區別。

  • Multitargettting是你編譯應用程序這將 對CLR運行時運行從您正在使用VS2010中,或者.NET 4.5的情況下,開發的應用程序 (.NET 4.0,不同的能力在VS 2012的情況下)。 VS中的多目標確保您的應用程序不會使用CLR運行時中引入的任何類型或方法,也不會使用基本類庫(BCL)中版本更新的版本,而目標版本更新。 VS通過在每個運行庫中使用可能被鎖定的DLL副本來做到這一點。
  • 並排執行意味着您可以在PC上安裝多個版本的CLR運行時。從CLR 4.0開始不再正確。您現在可以在同一進程中加載​​CLR 4以及舊版運行時(CLR 1.1或CLR 2.0) 。請閱讀http://msdn.microsoft.com/en-us/magazine/ee819091.aspx (章節「行爲概述」)瞭解更多詳情。

關於你的問題:

  1. 請閱讀上面提到的MSDN文章鏈接。
  2. 術語隱藏意味着當您將在.NET 4.5下調試應用程序時,您的BCL版本將包含錯誤修復程序 ,在部署到.NET 4.0後可能會在後面觸發您,因爲該錯誤尚未在該版本的BCL上修復。 您將會遇到運行時錯誤,您可以通過這種方式來觀察運行時錯誤,這取決於您到達的錯誤類型。 這可能是安全問題,應用程序或運行時異常中的邏輯錯誤。如果您想要捕獲這些問題 您可以隨時在僅安裝了.NET 4.0的乾淨PC上進行測試。
  3. 您給出的兩個鏈接都不以任何方式相互干擾。Scott和MSDN在 中都是正確的,說明哪個版本的.NET具有哪個版本的CLR運行時安裝。
+0

您好codevision,非常感謝您回答我:) 。讓我們也邀請其他人以他們的觀點來讚美:)乾杯 – Learner 2013-03-22 20:19:12

0

一些博客說,通過邊執行邊指過程的CLR 的兩個版本。其他一些人聲稱,它與.net 2.0和.net 3.0 程序集並排執行。我非常失望,我是 不確定誰是對的誰是錯的。

「其他人」只是簡單地誤導自己。 .NET Framework 2.0和3.0程序集不是「並排」執行的。像許多人說的那樣,並行執行只在運行CLR 1.x/2.0/4.0的混合時纔有意義。

MS已經讓VS在這種類型的開發靈活性。 是否適合任何用途?

如果您在原始.NET Framework 4.0上運行.NET Framework 4.5應用程序,則Windows/.NET報告任何不兼容情況將是有益的。然而,這將是一個努力實現,因爲修補廣泛發佈的.NET Framework 4.0幾乎是不可能的。

在這種情況下,微軟希望開發者自己聰明一些。當他們觀察到不兼容性(無論是運行時異常/編譯時錯誤還是其他)時,他們應該檢查是什麼原因並解決這個問題。

那爲什麼命名術語是3.0.x.x/3.5.x.x?

這只是歷史的一部分,並且詢問爲什麼沒有意義。微軟從這些錯誤中吸取教訓,而且.NET Core正在走上正軌。