簡體   English   中英

如何使應用程序與.NET 4.0和.NET 4.5兼容

[英]How to make an application compatible with .NET 4.0 and .NET 4.5

我是.NET和C#的新手。

我最近承擔了將我的應用程序從.NET 4.0升級到.NET 4.5的任務,以跟上我團隊中的其他產品。

我希望能夠在.NET 4和.NET 4.5上運行我的應用程序(它有幾個項目,一些基於ASP .NET的Web項目和一些獨立的應用程序項目(控制台應用程序))。

在線關於<supportedRuntime>元素通過更改目標運行時從.NET 4.0升級到.NET 4.5后,我意識到compilation元素的targetFramework屬性現在是4.5 我知道這意味着代碼肯定適用於.NET framework 4.5。

如果我有一組等待4.5升級但仍在運行.NET 4.0的節點,該怎么辦? 我很確定我的更改會破壞應用程序。

所以我做了一些研究,在網上提到一些文檔之后,我從解決方案中項目的*.config文件中的supportedRuntime元素中刪除了sku屬性。 雖然supportedRuntime元素的version屬性仍然是v4.0 (CLR版本)。 我希望這使得應用程序在.NET framework 4.0和4.5上運行。

但是除了我從ASP .NET配置指南中讀到的內容之外,我對compilation元素及其意義並不是很了解。 離開targetFramework會確保我的應用程序在.NET 4.0和.NET 4.5上運行嗎?

如何確保我的更改與.NET 4.0和.NET 4.5兼容?

[為什么不將它保留為.NET 4.0,直到節點的.NET框架升級?]

您可能想知道為什么我現在不能將其保留為.NET 4.0。 目的是升級到.NET 4.5。 但獨立腳本在一組不支持.NET 4.5的Windows Server 2003上運行的節點上運行。 我已經讓我的系統管理團隊為.NET進程分配了另一個節點。 所以暫時我無法真正完全升級現有代碼。 直到我在.NET 4.5上測試現有代碼並將部署配置到這些新節點之后。 感謝來自@hvd的評論,它在我困惑的大腦中點亮了一個燈泡。 現在我知道如何繼續。

.NET Framework的版本控制不同於運行時的版本控制(CLR和抖動)。 在以前的版本中已經是這種情況,.NET 2.0,3.0,3.5和3.5SP1使用了運行時版本v2.0.50727。

4.0分支版本大致相同,版本4.0,4.0.1,4.0.2,4.0.3,4.5,4.5.1和4.5.2都使用相同的運行時版本,v4.0.30319

添加了“sku”屬性以向CLR提供額外檢查,以確保計算機上存在正確的框架版本。 並且提供此功能非常理想。 沒有它,您的4.5目標項目將在僅安裝4.0的計算機上正常啟動。 但是,由於缺少類型或方法,通常會導致非常丑陋的運行時異常。 特別是4.5中的變化相當有影響,類型從一個組件移動到另一個組件,以使框架的占用空間在便攜式設備上更小。 這個問題是一個很好的例子,診斷起來非常難看。

EventWaitHandle.WaitOne(int)重載是一個很好的例子。 在.NET 2.0SP2(又名3.5)中添加。 一個好主意,沒有人知道如何正確使用WaitOne(int,bool)過載。 但是,mscorlib的[AssemblyVersion]沒有相應的變化,這是一個突破性的變化。 由於引發了可怕的問題,程序員使用了重載,但是當它運行在舊版本的.NET上時,程序失敗了。 帶有MissingMethodException的Kaboom,幾乎不知道如何丟失一個簡單而常見的方法。

冷酷的事實是,如果你在項目中定位4.5並刪除sku,那么你將會處理這種痛苦。 必須以4.0為目標以保持兼容性,當然這很簡單。

實際上,如果在項目屬性中將框架版本更改為4.0 ,則可以確保在設計時/開發時間內不會顯示4.5個程序集成員(名稱空間,類,接口...)。 如果您嘗試使用4.5版中的成員,編譯器將會哭泣。

這可能是確保您不會使用以前的.NET Framework版本中不存在的新成員的最佳方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM