從.NET遷移到.NET Core的一個(gè)主要原因,在于后者具備在Linux上運(yùn)行的能力。但是對(duì)于大型企業(yè)應(yīng)用,不可能實(shí)現(xiàn)一步遷移到位。由此,Microsoft推薦采用一種逐步遷移做法:
-
第一步,遷移到ASP.NET Core(依然使用.NET Framework);
-
第二步,遷移到.NET Core(依然運(yùn)行在Windows上);
-
第三步,遷移到Linux上;
-
第四步,遷移到(托管Linux主機(jī)的)Azure中。
這一做法理論上可行,但是在第二步中會(huì)有阻礙,因?yàn)槿狈﹃P(guān)鍵API。的推出,意在解決這一問(wèn)題。該兼容包是一個(gè)NuGet軟件包集合,其中包含了近兩萬(wàn)個(gè)API,目的在于解決Web應(yīng)用程序開(kāi)發(fā)人員對(duì)于優(yōu)秀軟件庫(kù)的需求。
新引入的API大體上可分為兩類。一類是僅適用于Windows的API,另一類是跨平臺(tái)的軟件庫(kù)。其中,僅適用于Windows的API包括:
其中大部分API是與Windows操作系統(tǒng)緊密關(guān)聯(lián)的,而相應(yīng)的Linux API通常在設(shè)計(jì)上迥異。
跨平臺(tái)的軟件庫(kù)包括:
-
緩存;
-
配置管理(ConfigurationManager),即處理遺留的app.config和web.config文件;
-
數(shù)據(jù)集擴(kuò)展(DatasetExtensions),用于不使用ORM訪問(wèn)數(shù)據(jù)庫(kù);
-
ODBC數(shù)據(jù)庫(kù)訪問(wèn);
-
System.Configuration.ConfigurationManager(MEF v1);
-
System.Drawing;
-
System.IO.Packaging,用于與MS Office類型的壓縮文件交互;
-
System.ServiceModel,即WCF(Windows Communication Foundation)。
需指出的是,這些API是刻意獨(dú)立于.NET Core的完整發(fā)布的。對(duì)此,Microsoft的Immo Landwerth給出了如下解釋:
以獨(dú)立軟件包提供的原因在于:(一)不少API是僅出于兼容性的考慮而提供的。在新代碼中,不應(yīng)依賴于這些API;(二)不少API僅用于Windows平臺(tái)。我們不希望將用戶引上一條更難以跨平臺(tái)遷移應(yīng)用的道路。
為了易于區(qū)分僅適用于Windows的和跨平臺(tái)的API,現(xiàn)在有一種可用。該工具可以標(biāo)記出那些在應(yīng)用中不應(yīng)繼續(xù)依賴的API。
你可以使用與棄用API相同的抑制選項(xiàng),但是也可以選擇對(duì)特定平臺(tái)給出抑制警告。如果你僅規(guī)劃在一組特定的平臺(tái)上支持你的代碼,例如只支持Windows和Linux但不支持macOS,這一工具十分有用。為此,你只需編輯項(xiàng)目文件,添加一個(gè)PlatformCompatIgnore
屬性,并在該屬性中列出所有要忽略的平臺(tái)。
標(biāo)簽:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn