vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

??? 繼上次”vNext之旅(1):從概念和基礎開始”之后再次學習vNext重新遇到了弄不懂的事情,花了一些時間學習,今天來分享一下,為后人節省些時間。

起因

??? 在用vNext造輪子——框架的時候引入“Microsoft.Dnx.Runtime”包錯誤。錯誤如下:

image

當時就很郁悶我明明用的是最新的版本:“1.0.0-rc-final”啊,為什么會報錯,微軟改名之后沒有及時更新包嗎?

下面我打開了這個包在NuGet的地址。

image

發現確實只寫了“DNX4.5.1”和“DNXCore50”這兩個版本,我同時又打開了“Microsoft.Extensions.DependencyInjection”包的NuGet地址。

image

發現了“.NETFramework 4.5.1”、“.NETPlatform 5.4”、”.NETCore5.0”。

這時我很好奇,這兩個包同是vNext的產物,沒有原因支持的平臺不一樣啊,抱著這個問題我覺得創建個ConsoleApp測試一下。

打開“project.json”發現了和類庫不一樣的地方

image

這邊的frameworks的命名完全不一樣,

在類庫中為:“net451”、“dotnet5.4”而在這里變成了“dnx451”、“dnxcore50”。

困惑又加重了,難道微軟改名之后忘記改了ConsoleApp的模板?

解惑

我試著把這幾個關鍵詞輸入google,找了了一些文章,終于解決了我的迷惑。

文章地址為:

https://github.com/aspnet/Announcements/issues/98

https://github.com/dotnet/corefx/blob/master/Documentation/project-docs/standard-platform.md

image

從這段話中說明了為什么“ConsoleApp”和“類庫”項目框架目標不一致是正常的。。。

也給出了“ConsoleApp”、“測試項目”還是需要使用“dnx”和“dnxcore”這樣的命名,而類庫則需要使用“net”和“dotnet”這樣的命名。

也給出了遷移方案,同時也給出了編碼過程中的環境變量:

1.DNX451 => NET451

2.DNXCORE50 => DONET5_4

同時也發現,微軟覺得應用程序和測試項目該采用“dnx”和“dnxcore”命名方式的框架目標。

至此疑惑解開,但還是覺得奇怪,微軟為什么要這樣區分,當時在.NET Framework上不就沒有分這么多嗎?

深究

為什么微軟需要這么做?

抱著這樣的疑問打開第二個鏈接,發現了這一段很好的解釋了“為什么”。

image

這么做只有一個目標:可移植性。

在之前我們再用NuGet GUI工具打包的時候會發現有很多選擇(下圖)

image

而這些平臺絕大數都擁有CLR,唯一變的只是應用程序端,只有這個端不一樣,那么我開發一個匯率計算算法需要每個平臺單獨寫嗎?其實不需要,因為我們都運行于CLR,我們有CTS、CLS還有CLR這些東西你們去做兼容就好了,不需要開發者在糾結了,所以現在的微軟一直強調“一個平臺戰略”、“一次編譯到處運行”,只把會變化的應用程序端設置框架版本,而類庫等通用的東西盡量變成全部可移植的。

下圖來自微軟:

52bc69d6-879c-11e5-8640-d92f9ee1e2d9

右邊的就屬于類庫,而左邊的被微軟定位為應用程序端的目標運行時。微軟希望現代化的類庫可以同時運行在這些端的運行時上,當然這個動作需要端的運行時配合與支持(微軟給出的CLR的標準、語言規范等)。

下圖是對應關系:

image

交流方式

QQ群:384413261(RabbitHub)

Email:majian159@live.com

轉載于:https://www.cnblogs.com/ants/p/5129279.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458410.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++中模板使用詳解

轉自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我們已經學過重載(Overloading),對重載函數而言,C的檢查機制能通過函數參數的不同及所屬類的不同。正確的調用重載函數。例如,為求兩個數的最大值&#xf…

騰訊2016春招安全崗筆試題解析

騰訊2016春招安全崗筆試題解析 昨天(4月2日)晚上7:00到9:00做了騰訊春招安全崗的筆試題。下面解析一下: 題目解析 1 在生成隨機數前用當前時間設置隨機數種子應該是安全的。如果程序用固定的數產生隨機數,其結果也是固定的。如果用…

網絡請求數據解析時,判斷數據是否為空

//判斷是否為空 (BOOL)IsStringEmptyOrNull:(NSString *)str { if (!str) { // null object return true; }else if (str nil){ return true; }else { if ([str isKindOfClass:[NSNull class]]) { return true; …

VS項目屬性的一些配置項的總結(持續增加。。。)

首先,解決方案和項目文件夾包含關系(c項目): VS解決方案和各個項目文件夾以及解決方案和各個項目對應的配置文件包含關系:假設新建一個項目ssyy,解決方案起名fangan,注意解決方案包括項目,此時生成的最外層…

shell編程中date用法(轉)

原文地址:http://blog.sina.com.cn/s/blog_61c006ea0100mgxe.html 1、date --help %% 輸出%符號 a literal % %a 當前域的星期縮寫 locale’s abbreviated weekday name (Sun..Sat) %A 當前域的星期全寫 locale’s full weekday name, variable length (Sunday..Saturday) %b 當…

linux下搭建FTP服務器

LINUX FTP簡單配置 FTP配置1、#vi /etc/vsftp/vsftpd.conf #主要配置幾個關鍵的就可以 anonymous_enableNO #拒絕匿名訪問 chroot_local_userYES #鎖定用戶目錄&#xff0c…

微信正則表達式 iOS

#pragma mark - 微信號的正則表達式 微信賬號僅支持6-20個字母、數字、下劃線或減號,以字母開頭 (BOOL)isWxNumber:(NSString *)WXNum{ NSString *passWordRegex "^[a-zA-Z][a-zA-Z0-9_-]{5,19}$"; NSPredicate *passWordPredicate [NSPredica…

子元素增加margin-top會增加給父元素的問題

假設我們有如下代碼 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Python 關鍵字

from&#xff1a;https://blog.csdn.net/liang19890820/article/details/68488392簡述 關鍵字是預先保留的標識符&#xff0c;每個關鍵字都有特殊的含義。編程語言眾多&#xff0c;但每種語言都有相應的關鍵字&#xff0c;Python 也不例外&#xff0c;它自帶了一個 keyword 模塊…

Zend Studio使用教程之升級Zend Studio(1/3)

2019獨角獸企業重金招聘Python工程師標準>>> Zend Studio是新一代的專業級智能PHP IDE&#xff0c;它旨在幫助開發人員提高工作效率&#xff0c;創造出高品質的PHP應用程序&#xff01;它包含了PHP開發所必須的部件&#xff0c;通過一整套的編輯、調試、分析、優化和…

身份證正則表達式

#pragma mark - 身份證的正則表達式 (BOOL)checkUserID:(NSString *)userID { //長度不為18的都排除掉 if (userID.length!18) { return NO; } //校驗格式 NSString *regex2 "^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d…

java中可重入鎖的學習總結

2019獨角獸企業重金招聘Python工程師標準>>> 經常看到網上的人說&#xff0c;可重入鎖一詞&#xff0c;但是總是沒怎么了解&#xff0c;到底什么是可重入鎖&#xff0c;一直是一個模糊的概念&#xff0c;下面來大致總結一下。 可重入鎖&#xff1a;指的是同一個線程…

Oracle DB優化

http://www.jb51.net/article/77876.htm http://www.jb51.net/article/56881.htm http://danni505.blog.51cto.com/15547/1163711/ http://blog.csdn.net/giianhui/article/details/8172786轉載于:https://www.cnblogs.com/diyunpeng/p/5132392.html

設置View單個圓角

#pragma mark - 設置View單個圓角 (void)addCornerWithView:(UIView *)aView type:(UIRectCorner)aCorners size:(CGSize)aSize { // 根據矩形畫帶圓角的曲線 UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:aView.bounds byRoundingCorners:aCorn…

Python 數據類型

簡述Python 中的每個值都有一個數據類型。在 Python 編程中&#xff0c;一切&#xff08;萬物&#xff09;皆對象&#xff0c;數據類型實際上是類&#xff0c;變量是這些類的實例&#xff08;對象&#xff09;。簡述數據類型Number數字String字符串List列表Tuple元組Set集合Dic…

基于用戶投票的排名算法(一):Delicious和Hacker News

互聯網的出現&#xff0c;意味著"信息大爆炸"。 用戶擔心的&#xff0c;不再是信息太少&#xff0c;而是信息太多。如何從大量信息之中&#xff0c;快速有效地找出最重要的內容&#xff0c;成了互聯網的一大核心問題。 各種各樣的排名算法&#xff0c;是目前過濾信息…

iOS 修改工程名

一兩個月之前&#xff0c;公司要求將現在的項目&#xff08;發貨端和接單端在一個項目里&#xff09;&#xff0c;拆分成兩個項目分別是接單端項目和發貨端項目&#xff0c;原有的項目還不能下架。這種情況就要考慮蘋果審核查代碼的重復率的問題了。老板的要求除了改變項目的主…

Windows 下 Python 環境搭建

簡述Python 是跨平臺的&#xff0c;可以運行在 Windows、Mac OS X 和各種 Linux/Unix 系統上。在學習 Python 之前&#xff0c;首先要搭建 Python 環境。完成后&#xff0c;會得到 Python 解釋器&#xff08;負責運行 Python 程序的&#xff09;&#xff0c;一個命令行交互環境…

面試中關于Java你所需知道的的一切

本篇文章會對面試中常遇到的Java技術點進行全面深入的總結&#xff0c;幫助我們在面試中更加得心應手&#xff0c;不參加面試的同學也能夠借此機會梳理一下自己的知識體系&#xff0c;進行查漏補缺。 1. Java中的原始數據類型都有哪些&#xff0c;它們的大小及對應的封裝類是什…

利用BBRSACryptor實現iOS端的RSA加解密

背景 RSA這種非對稱加密被廣泛的運用于網絡數據的傳輸&#xff0c;但其在iOS上很難直接實現&#xff0c;BBRSACryptor框架通過移植openssl實現了iOS端的RSA&#xff0c;本文將介紹如何使用BBRSACryptor生成證書&#xff0c;加載公鑰&#xff0c;以及后端如何用php讀取證書&…