很多.net項(xiàng)目在開發(fā)的時(shí)候,.net core還沒有出現(xiàn)或者還么有成熟,如今.netcore3.1已經(jīng)出現(xiàn),其技術(shù)風(fēng)險(xiǎn)已經(jīng)比較低,今天對(duì)項(xiàng)目如何遷移到.net core做一個(gè)簡(jiǎn)單的梳理,瑾做參考。
創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項(xiàng)目管理團(tuán)隊(duì),建立的售前、實(shí)施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、雅安移動(dòng)機(jī)房解決方案。為客戶網(wǎng)站安全和日常運(yùn)維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球超過(guò)千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。1.免費(fèi)和最寬松的開源協(xié)議
.NET Core從屬于.NET基金會(huì),由微軟進(jìn)行官方支持。使用最寬松的MIT和Apache 2開源協(xié)議,文檔協(xié)議遵循CC-BY。這將允許任何人任何組織和企業(yè)任意處置,包括使用,復(fù)制,修改,合并,發(fā)表,分發(fā),再授權(quán),或者銷售。唯一的限制是,軟件中必須包含上述版權(quán)和許可提示,后者協(xié)議將會(huì)除了為用戶提供版權(quán)許可之外,還有專利許可,并且授權(quán)是免費(fèi),無(wú)排他性的(任何個(gè)人和企業(yè)都能獲得授權(quán))并且永久不可撤銷,用戶使用.NET Core完全不用擔(dān)心收費(fèi)問題,你可以很自由的部署在任何地方.
2.輕量級(jí)、跨平臺(tái)
3.組件化、模塊化、IOC+Nuget、中間件
4.高性能
5.統(tǒng)一了MVC和WebAPI編程模型
a)?比如:ASP.NET Core?中MVC?和Web API 直接或間接繼承同一個(gè)基類 ControllerBase,提供可使用的API也一致化
b)?比如:舊ASP.NET時(shí)代,寫全局filter需要針對(duì)MVC?和Web API?分別編寫代碼,但在ASP.NET Core,直接使用一套中間件代碼即可
6.可測(cè)試性
7.微服務(wù)、容器化支持
8.標(biāo)準(zhǔn)化?.NET API?規(guī)范- .NET STANDARD,整體架構(gòu)如下圖:
?
1.TechEmpower機(jī)構(gòu)
TechEmpower機(jī)構(gòu)會(huì)定期對(duì)各語(yǔ)言主流的web框架做性能測(cè)試
地址:https://www.techempower.com/benchmarks/
?
2.博客園博主、微軟MVP –?楊曉東,做的 “Hello World”性能測(cè)試
ASP.NET Core 1.1性能對(duì)比評(píng)測(cè)(ASP.NET,Python,Java,NodeJS)
地址:https://www.cnblogs.com/savorboard/archive/2016/10/17/dotnet-benchmarks.html
性能測(cè)試工具:
微軟出品:Benchmarks
地址:https://github.com/aspnet/benchmarks
度量.net framework 遷移到.net core的工作量
地址:https://www.cnblogs.com/vveiliang/p/7402409.html
可移植性分析工具:.NET Portability Analyzer
地址:https://github.com/Microsoft/dotnet-apiport
【Cli 版本】??【Visual Studio Extension 版本】
地址:https://github.com/Microsoft/dotnet-apiport/tree/dev/docs/VSExtension
評(píng)估會(huì)給出類似如下報(bào)告:
.NET Standard Versions
地址:https://github.com/dotnet/standard/blob/master/docs/versions.md
遷移方案制定
微軟官方《組織項(xiàng)目以支持 .NET Framework 和 .NET Core》文章中,有介紹兩種遷移方案:
方案一、將現(xiàn)有項(xiàng)目和?.NET Core?項(xiàng)目合并為單個(gè)項(xiàng)目(多目標(biāo)框架)
方案二、將現(xiàn)有項(xiàng)目和新的?.NET Core?項(xiàng)目分離(拷貝到新項(xiàng)目)
遷移過(guò)程中,有類庫(kù)命名空間被調(diào)整,nuget歸屬包被調(diào)整,具體類庫(kù)在.NET Core哪個(gè)版本中被實(shí)現(xiàn)也不是很清楚,通過(guò)下面兩個(gè)查詢助手,即可解決這些問題。
1、查詢命名空間、類庫(kù)在哪個(gè)nuget package包中定義(第一次查詢比較慢)
地址:https://packagesearch.azurewebsites.net/
2、查詢 NET API 在各版本中實(shí)現(xiàn)
地址:https://apisof.net/catalog/
結(jié)果圖如下:
類庫(kù)項(xiàng)目、應(yīng)用項(xiàng)目如何選擇框架類型
1.如何組織一個(gè)同時(shí)面向多目標(biāo)框架的 C# 項(xiàng)目解決方案
地址:https://walterlv.com/post/organize-csharp-project-targeting-multiple-platforms.html
2..NetStandard;.netCore;FX(.NetFrameWork)之間引用關(guān)系
在?.NET Standard 2.0中,我們使在?.NET Standard?庫(kù)中通過(guò)一個(gè)兼容層去引用已有的?.NET Framework?的庫(kù)成為可能。當(dāng)然,這只對(duì)那些只使用了適用于?.NET Standard API?的?.NET Framework?庫(kù)有效。
?
FX引用.NetCore:不通過(guò)
.NetStandard引用.NetCore:不通過(guò)
.NetCore引用FX:通過(guò)
.NetCore引用.NetStandard:通過(guò)
.NetStandard引用FX:通過(guò)
FX引用.NetStandard:通過(guò)?
ASP.NET Core可以在“.NET Framework 和 .NET Core”上運(yùn)行,但ASP.NET Core 3.0 以及更高版本只能在 .NET Core 中運(yùn)行。
具體參見:
【譯】介紹 .NET Standard?
地址:https://www.cnblogs.com/jinanxiaolaohu/p/10681024.html
關(guān)于.net core 和 .net fx相互引用的問題
地址:https://q.cnblogs.com/q/103398/
.NetStandard;.netCore;FX(.NetFrameWork)之間引用關(guān)系
地址:https://www.cnblogs.com/xiaoliangge/p/7475268.html
3.項(xiàng)目支持多目標(biāo)框架
支持多目標(biāo)框架,并解決第三方庫(kù)引用差異的問題(在 csproj 文件中指定包含條件)
地址:https://walterlv.com/post/configure-projects-to-target-multiple-platforms.html
目標(biāo)框架名稱列表 (命名全小寫)
地址:https://docs.microsoft.com/zh-cn/nuget/reference/target-frameworks
如何調(diào)試多目標(biāo)框架類庫(kù)?
地址:https://docs.microsoft.com/zh-cn/nuget/reference/target-frameworks
NET Standard/Core項(xiàng)目使用條件判斷輸出多版本xml注釋文檔
地址:https://blog.csdn.net/starfd/article/details/78839704
4.多目標(biāo)框架中共享代碼方案
1、【選】.NET Standard,需要目標(biāo)SDK支持對(duì)應(yīng)的?.NET Standard?版本。
2、共享項(xiàng)目。直接共享了源碼,只要在目標(biāo)項(xiàng)目中指定了條件編譯符,那么源碼便能針對(duì)各種不同的目標(biāo)框架進(jìn)行分別編譯。
3、[add as link]使用鏈接共享 Visual Studio 中的代碼文件
地址:https://blog.csdn.net/starfd/article/details/78839704
5.條件編譯符號(hào) (命名全大寫)
指令:#if #elif #else #endif?(||、&&、!)
因?yàn)槟繕?biāo)框架提供的API不相同。故必要時(shí)可添加條件編譯符號(hào)以便支持不同的運(yùn)行時(shí)版本。
微軟有針對(duì)各個(gè)目標(biāo)框架有預(yù)定義預(yù)處理器符號(hào),vs編譯時(shí)會(huì)自動(dòng)識(shí)別到這些框架條件編譯符號(hào)。
.NET Framework 4.5 --> NET45
.NET Framework 4.6 --> NET46
.NET Framework 4.6.1 --> NET461
.NET Standard 1.0 --> NETSTANDARD1_0
.NET Standard 1.6 --> NETSTANDARD1_6
.NETCOREAPP 2.0 --> NETCOREAPP2_0
參考:
#if指令文檔
地址:https://blog.csdn.net/starfd/article/details/78839704
如何將條件編譯符號(hào)(DefineConstants)傳遞給msbuild
地址:http://www.voidcn.com/article/p-nsrcccet-btr.html
使用 Windows 兼容性包將代碼移植到 .NET Core
地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/windows-compat-pack
如何:將 Windows 窗體桌面應(yīng)用程序移植到 .NET Core
地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/winforms
如何:將 WPF 桌面應(yīng)用移植到 .NET Core
地址:https://docs.microsoft.com/zh-cn/dotnet/core/porting/wpf
遷移HttpHandler與HttpModule到 ASP.NET Core 中間件
地址:https://docs.microsoft.com/en-us/aspnet/core/migration/http-modules?view=aspnetcore-2.2
.NET CORE 2.0 踩坑記錄之ConfigurationManager
地址:https://www.cnblogs.com/binbinxu/p/7440342.html
.NET Core/Standard 2.0?編譯時(shí)報(bào)“CS0579: Duplicate 'AssemblyFileVersionAttribute' attribute”錯(cuò)誤
1.自動(dòng)生成AssemblyInfo的原理
地址:https://www.cnblogs.com/binbinxu/p/7440342.html
2.解決方案:不自動(dòng)創(chuàng)建 AssemblyInfo 文件
地址:https://cloud.tencent.com/developer/article/1402303
ASP.NET Core開發(fā)之HttpContext
地址:https://www.cnblogs.com/linezero/p/6801602.html
.net core 使用JsonConvert替代JavaScriptSerializer
地址:https://my.oschina.net/idoop/blog/915555
ASP.NET Core 中重復(fù)讀取 Request.Body 的正確姿勢(shì)
地址:http://www.cnblogs.com/dudu/p/9190747.html
JsonRequestBehavior在core中被移除的問題
1.[ASP.NET MVC]解決"若要允許 GET請(qǐng)求,請(qǐng)將 JsonRequestBehavior 設(shè)置為AllowGet"
地址:https://shiyousan.com/post/635428880708292949
2.[ASP.NET Core]core中不會(huì)拋出AllowGet異常,對(duì)于DenyGet則使用[HttpPost]代替
地址:
https://stackoverflow.com/questions/38578463/asp-net-core-the-name-jsonrequestbehavior-does-not-exist-in-the-current-cont
https://stackoverflow.com/questions/8464677/why-is-jsonrequestbehavior-needed?r=SearchResults
獲取ASP.NET Core中的Web根路徑和內(nèi)容根路徑(移除的MapPath)
地址:http://beidouxun.com/Articles/Details/419f4786-679c-4316-b2bb-baea26c94205
為什么我的會(huì)話狀態(tài)在ASP.NET Core中不工作了?
地址:https://www.cnblogs.com/lwqlun/p/10526380.html
由于ASP.NET Core 2.1中引入的Cookie同意和非必要cookie的GDPR功能引起。(GDPR,即General Data Protection Regulation,《通用數(shù)據(jù)保護(hù)條例》)?
在ASP.NET4.5和ASP.NET Core中共享cookies認(rèn)證信息(加解密方式不一致問題)
.NET跨平臺(tái)之旅:ASP.NET Core從傳統(tǒng)ASP.NET的Cookie中讀取用戶登錄信息
地址:https://www.cnblogs.com/cmt/p/5940796.html
開源方案:[git]idunno.CookieSharing
地址:https://github.com/blowdart/idunno.CookieSharing
ASP.NET Core如何獲取客戶端IP地址(被移除的ServerVariables對(duì)象)
地址:https://www.cnblogs.com/dudu/p/5972649.html
如何獲取項(xiàng)目依賴的所有程序集
方案一:AppDomain.CurrentDomain.GetAssemblies(),此辦法不能獲取到所有依賴的程序集,因?yàn)?Net有延遲加載程序集機(jī)制
方案二:適用于傳統(tǒng)ASP.NET項(xiàng)目,System.Web.Compilation.BuildManager.GetReferencedAssemblies();
方案三:適用于ASP.NET Core項(xiàng)目,DependencyContext.Default.CompileLibraries,具體代碼參考下面
參考:
AppDomain.CurrentDomain.GetAssemblies()
地址:https://www.cnblogs.com/beixing/p/3803874.html
Is there an alternative for BuildManager.GetReferencedAssemblies() in ASP.NET Core??
地址:https://stackoverflow.com/questions/53989393/is-there-an-alternative-for-buildmanager-getreferencedassemblies-in-asp-net-co
.NET Core 2.0遷移System.Runtime.Caching
地址:https://www.cnblogs.com/mantgh/p/7429551.html
.NET Core 2.0升級(jí)到3.0實(shí)戰(zhàn)方案
地址:https://www.cnblogs.com/laozhang-is-phi/p/11520048.html
從.NET CORE2.2升級(jí)到3.0過(guò)程及遇到的一些問題
地址:https://www.cnblogs.com/roadflow/p/11711686.html?
【微軟官方】從 EF6 到 EF Core的遷移系列
地址:https://www.cnblogs.com/roadflow/p/11711686.html
【微軟官方】EF Core 版本升級(jí)遷移系列
地址:https://docs.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-2.2
按照上面的方式修改API兼容性后,框架類庫(kù)可以順利遷移到.NET Core,編譯通過(guò),代碼運(yùn)行也正常。但是ASP.NET Core風(fēng)格的應(yīng)用,其寫法也是有很多變化的。具體參考下面文檔:
將傳統(tǒng) ASP.NET 應(yīng)用遷移到 .NET Core
地址:https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654072516&idx=3&sn=af3916ec4e2c31c231f5f01be75712d8&chksm=80dbca91b7ac43870a3fa4dce10f5a97adf1548d1381a99f27972c67c00a1e593aa926b110ad&mpshare=1&scene=23&srcid=0311kxbJ5rwkIYu7xO2Yx08U
【微軟官方】ASP.NET 遷移到 ASP.NET Core教程系列
地址:https://docs.microsoft.com/zh-cn/aspnet/core/migration/proper-to-2x/?view=aspnetcore-2.2
【微軟官方】ASP.NET Core 版本升級(jí)遷移系列
地址:https://docs.microsoft.com/zh-cn/aspnet/core/migration/20_21?view=aspnetcore-2.2
相關(guān)文章:
.NET Core 3中的性能提升(譯文)
地址:https://zhuanlan.zhihu.com/p/66152703
Java(11,12) 與 .NET Core(2.2,3.0)的性能對(duì)比測(cè)試
地址:https://blog.csdn.net/hez2010/article/details/86551299
載自:cnblog.windy
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。