原創(chuàng)|行業(yè)資訊|編輯:龔雪|2016-05-09 09:57:49.000|閱讀 411 次
概述:雖然有一部分現(xiàn)有的.NET應用程序,尤其是基于ASP.NET MVC的應用程序將能夠比較簡單地遷移至.NET Core,但另一部分.NET應用在遷移過程中可能會遇到某些問題。本文就將為大家介紹在.NET Core中將被廢止的技術。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
雖然有一部分現(xiàn)有的.NET應用程序,尤其是基于ASP.NET MVC的應用程序將能夠比較簡單地遷移至.NET Core,但另一部分.NET應用在遷移過程中可能會遇到某些問題。有一些問題是顯而易見的,例如從WinForms或WPF應用遷移至Universal Windows Applications(UWP),而另一類些問題則更加微妙,這關系到.NET Framework核心功能中更底層的實現(xiàn)。
反射API在.NET Core中產生了很大的變化。正如在WinRT中的應用方式一樣,反射功能被分成一種輕量級的版本以及一種開銷更大的版本。來自微軟的Immo Landwerth寫道:
在推出.NET Native時,我們利用了一種技術,它允許我們將應用與框架和第三方依賴進行靜態(tài)鏈接。要使這種鏈接功能可行,它必須能夠找出在你的應用沒有使用的那部分框架功能。對于其他技術,例如C++來說,這一過程并不復雜,因為這種系統(tǒng)并不具備反射這樣的動態(tài)能力。當然,在.NET Native中仍然支持反射,但我們希望讓這個平臺盡可能地降低開銷,也就是說不必為你所不需要的特性增加開銷。這一點對于反射來說尤其明顯,因為它對于運行時以及編譯器能夠基于靜態(tài)信息進行哪些操作施加了極大的限制。
因此,在理想的情況下,反射應當作為.NET Core中一個可選的組件,你可以選擇在自己的應用中完全放棄使用它。麻煩在于,System.Object在進行Object.GetType()操作時將對反射產生依賴。為了打破這種依賴,我們決定讓System.Type不再展現(xiàn)整個反射類型信息,而僅僅展示類型的名稱。這也意味著在.NET Core中的System.Type不再包括GetMembers()等API,但仍然會暴露Name等API。
通過一個名為GetTypeInfo的擴展方法,可以得到在一般情況下能夠從Type對象中獲取的信息。TypeInfo類所包含的信息沒有原來那么豐富,但微軟最近決定在.NET Core中重新引入一部分反射API,這部分變更是超出原先計劃之外的。
為了使代碼更容易進行移植,.NET 4.5及之后的版本提供了對TypeInfo的某種支持,它與在.NET Core中使用的版本相類似。
App Domain在CoreCLR中得以實現(xiàn),但沒有在.NET Native中實現(xiàn)。由于對App Domain的實現(xiàn)需要大量的運行時特性支持,因此目前還沒有任何對它的支持計劃。“對于代碼的隔離,我們建議通過進程或容器實現(xiàn)。而對于程序集的動態(tài)加載,我們建議使用新的AssemblyLoadContext類。”
現(xiàn)如今,已經(jīng)很少有開發(fā)者還能夠記起Remoting庫的存在,更不要說如何使用它了。即使還有人在使用,他們也一直在抱怨它的性能、高復雜性以及總體表現(xiàn)的脆弱性。
如今,多個.NET應用在同一臺機器上的通信基本都被WCF所取代,后者能夠帶來更好的性能,可用于管道或內存映射文件。對于跨機器的通信,微軟推薦“使用一種低開銷的純文本協(xié)議,例如HTTP”。因此,微軟并沒有在.NET Core中支持Remoting的計劃。
.NET Core將支持大多數(shù)序列化器,例如數(shù)據(jù)契約序列化、XML序列化、JSON.NET以及protobuf-net。而一個被排除在外的重要角色是二進制序列化。
通過這十年來的經(jīng)驗,我們終于了解到序列化是一項非常復雜的任務,支持序列化的類型在兼容性方面要面對沉重的負擔。因此,我們已經(jīng)決定讓序列化成為一種協(xié)議,它將在可用的公開API的基礎上實現(xiàn)。然而,二進制序列化的實現(xiàn)需要對類型本身的深入了解,因為這種方式可以對整個對象圖進行序列化,甚至包括私有的狀態(tài)信息。
從理論上說,沙箱是一種優(yōu)秀的思想,它允許部分信任代碼以安全的方式執(zhí)行。但在實踐中,要想正確地應用它非常困難,哪怕是一點點微小的錯誤,也會導致安全性方面的漏洞。Immo Landwerth還表示,它“使實現(xiàn)變得更加困難,并且經(jīng)常會給未使用沙箱的應用的性能帶來負面影響。”
推薦的替代方案是使用獨立的進程,通過一個具有有限權限的用戶帳號運行這些進程。通過這種方式,運行時不必重復進行一些開銷較大的權限檢查工作,因為操作系統(tǒng)已經(jīng)為你完成了這方面的任務。
微軟正考慮將下表中列舉的組件進行開源,并移植到.NET Core。
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網(wǎng)