精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

擋不住的好奇心:ASP.NET 5是如何通過XRE實現跨平臺的

開發 后端
.NET程序員也有自己的幸福,.NET的跨平臺是一種幸福,.NET的開源也是一種幸福,而更幸福的是可以通過開源的.NET了解.NET是如何一步步走向跨平臺的,所以幸福是一種過程。

[[126791]]

.NET程序員也有自己的幸福,.NET的跨平臺是一種幸福,.NET的開源也是一種幸福,而更幸福的是可以通過開源的.NET了解.NET是如何一步步走向跨平臺的,所以幸福是一種過程。

在.NET跨平臺的進程中,ASP.NET顯然走在了前頭,而通過探究ASP.NET 5是如何實現跨平臺的,可以稍稍滿足一下自己的好奇心。

體驗ASP.NET 5跨平臺有2種方式:

1)在Mac下,git簽出XRE的源代碼(前身是KRuntime),然后運行sh build.sh,就能完成整個XRE項目的生成。

2)在Mac下,寫一個簡單的ASP.NET項目,然后用k kestrel運行,詳見不寫1行代碼,在Mac上體驗ASP.NET 5的最簡單方法

這篇博文就從k命令下手,一探ASP.NET 5跨平臺的究竟。

運行k kestrel(即將是dotnet kestrel),實際運行的是下面的命令(根據project.json中的commands配置):

k "Microsoft.AspNet.Hosting --server kestrel --server.urls http://localhost:8002"

Microsoft.AspNet.Hosting是一個.NET控制臺程序實現的OWIN Host(源碼),kestrel是一個基于libuv用.NET實現的OWIN Server(也是Web Server,源碼),kestel是由Microsoft.AspNet.Hosting加載的。

既然Microsoft.AspNet.Hosting是一個托管程序,它自己是無法直接運行的。因為運行一個.NET程序的前提條件是CLR已運行,而CLR自己不能運行自己,CLR運行的前提是有一個host程序將它加載。

如果你在Mac下用過Mono,就你就知道運行一個.NET程序需要用mono命令,mono命令的作用就是創建一個進程,加載Mono Runtime(Mono CLR),然后由Mono Runtime執行.NET程序。

而在ASP.NET 5中,并沒有直接用mono命令,而是k命令,自從KRuntime改名為XRE之后,k命令也將會被dotnet命令取代。

dotnet.sh

在非Windows平臺下,k命令對應的是k.sh。現在改為XRE之后,也就是donet命令對應dotnet.sh。所以ASP.NET 5跨平臺的秘密就藏在dotnet.sh中。

下面就直擊XRE項目中的scripts/dotnet.sh:

 
#...
if [ -f "$DIR/mono" ]; then
  exec "$DIR/mono" $MONO_OPTIONS "$DIR/dotnet.mono.managed.dll" "$@"
else
  exec mono $MONO_OPTIONS "$DIR/dotnet.mono.managed.dll" "$@"
fi
 

毫無懸念,依然用的是mono。但是用了mono,如何加載.NET Core CLR,難道還是用Mono Runtime?

帶著這個疑問,順藤摸瓜,看dotnet.mono.managed.dll干了啥。

dotnet.mono.managed.dll的實現代碼就在XRE項目中,是一個簡單的C#控制臺程序,它干了兩件事:1)分析命令行參數;2)調用RuntimeBootstrapper.Execute():

 
public class EntryPoint
{
    public static int Main(string[] arguments)
    {
        //...
        arguments = ExpandCommandLineArguments(arguments);
        //...
        return RuntimeBootstrapper.Execute(arguments);
    }
}
 

繼續順藤摸瓜至 [dotnet.hosting.RuntimeBootstrapper],[RuntimeBootstrapper.Execute()] 調用了 [RuntimeBootstrapper.ExecuteAsync()]。

而托管的 [RuntimeBootstrapper.ExecuteAsync()] 竟然拐了個彎,執行了非托管的dotnet命令(一個由dotnet.cpp實現的C++程序)。

mono命令(非托管) -> Mono Runtime -> dotnet.mono.managed(托管) -> RuntimeBootstrapper(托管) -> dotnet命令(非托管),ASP.NET 5 XRE的代碼真是十八彎。

[[126793]]

千呼萬喚始出來,原來真正的主角就藏在十八彎之后。

dotnet.cpp加載了非托管的dotnet.coreclr.dll:

LPCWSTR pwzHostModuleName = L"dotnet.coreclr.dll";
m_hHostModule = ::LoadLibraryExW(pwzHostModuleName, NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS);
pfnCallApplicationMain = (FnCallApplicationMain)::GetProcAddress(m_hHostModule, pszCallApplicationMainName);

而dotnet.coreclr.dll是由XRE中的C++程序dotnet.coreclr.cpp實現的,最終由dotnet.coreclr.cpp加載了coreclr.dll: 

hCoreCLRModule = ::LoadLibraryExW(L"coreclr.dll", NULL, 0);

dotnet.coreclr.cpp就是加載CLR的主角。

這不讓人產生疑問,這也可以?僅靠一個C++程序就能加載CLR,執行.NET程序,那我們在Windows上為什么要安裝一個龐大的.NET Framework?

真的可以!一個非托管的host程序+CLR,就能運行.NET程序,不信你可以看這篇文章震撼一下:Hosting .NET Core Clr in your own process 。

加載CLR的目的是為了執行.NET程序集中的IL代碼,而要執行的程序集是由dotnet命令(前身是k命令)的命令行參數所傳遞過來的,比如dotnet kestrel(之前是k kestrel),對應的程序集是 Microsoft.AspNet.Hosting。CLR調用 Microsoft.AspNet.Hosting.Program.Main() 方法開始執行,ASP.NET 5就開始干活了。

Core CLR被加載、Microsoft.AspNet.Hosting被運行之后,在 RuntimeBootstrapper.ExecuteAsync() 中,還繼續加載了一些dotnet.host的相關程序集(注意:這時不是Core CLR,而是Mono Runtime)。

 
//...
var assembly = Assembly.Load(new AssemblyName("dotnet.host"));
//...
var loaderContainerType = assembly.GetType("dotnet.host.LoaderContainer");
var cachedAssemblyLoaderType = assembly.GetType("dotnet.host.CachedAssemblyLoader");
var pathBasedLoaderType = assembly.GetType("dotnet.host.PathBasedAssemblyLoader");
//...
 

到這里,不知你有沒有被這十八彎給繞暈,如果沒被繞暈,請繼續往下看。

[[126794]]

這時一個大大的問號浮現在眼前,既然dotnet命令能直接加載Core CLR,為什么還要用mono命令中轉一下?

百思不得其解。。。

在寫這篇博文的過程中,突然產生了一個大膽猜想——

在Core CLR被加載,Microsoft.AspNet.Hosting被執行之后,為什么還要用Mono Runtime加載一些dotnet.host相關的程序集?為什么不直接用Core CLR加載呢?這只能用一個原因來解釋,dotnet.host依賴的一些程序集在在.NET Framework中有實現,但是在.NET Core Framework中還沒有實現,而Mono是.NET Framework的一個跨平臺實現,在Mono中也有對應的實現。完整的.NET Core Framework(github.com/dotnet/corefx)還在緊張開發之中,在它出來之前,微軟只能借助Mono。這也是ASP.NET的跨平臺走在前面要付出的代價,隨著.NET Core Framework的完成,XRE的改進,可以預計ASP.NET的跨平臺是會脫離Mono的。

當然,這只是一個猜想,如果你知道真相,歡迎來揭開。

責任編輯:林師授 來源: dudu的博客
相關推薦

2013-11-07 16:16:24

2017-03-30 15:19:36

2015-11-19 09:26:01

ASP.NET跨平臺實踐

2015-05-07 13:38:15

2010-01-21 10:22:53

JAVA認證

2009-08-03 14:22:33

什么是ASP.NET

2021-03-01 19:22:15

大數據好奇心CIO

2025-11-06 07:00:00

生成式AI影子AICIO

2023-09-04 09:07:50

CIOIT領域

2018-09-18 15:26:21

電腦產品主板

2023-02-21 17:06:49

硬件軟件系統

2011-09-22 10:58:56

ASP.NET

2015-06-30 08:37:12

ASP.NET.NET

2015-07-02 15:04:53

CSS好奇心+

2009-07-24 14:36:10

ASP.NET跨頁面傳

2015-06-11 14:57:23

ASP.NET 5

2009-07-22 17:45:11

ASP.NET插件

2009-07-20 15:44:32

ASP.NET MVC

2021-01-05 07:51:06

版本化ASP

2015-05-11 18:30:59

360
點贊
收藏

51CTO技術棧公眾號

国产精品久久电影观看| 一区二区三区亚洲| 91丨九色丨尤物| 欧美亚洲综合一区| 99re99热| 奇米影视888狠狠狠777不卡| 日本欧美大码aⅴ在线播放| 久久手机免费视频| 久久人人爽人人爽人人片| 成人免费一区| 激情av在线| 99久久精品久久久久久清纯| 国产精品成人免费电影| 欧美日韩激情在线观看| 久操精品在线| 欧美精品一区二区三区蜜桃 | 欧美性色19p| 男女h黄动漫啪啪无遮挡软件| 五月激情丁香婷婷| 国产一区二区伦理片| 国产v综合ⅴ日韩v欧美大片| 久久国产精品波多野结衣av| 日韩综合网站| 亚洲欧美变态国产另类| 精品人妻在线视频| 精品视频在线观看网站| 欧美色区777第一页| av动漫免费看| 综合久久综合久久| 高清不卡日本v二区在线| 中文字幕丰满人伦在线| 国产精品久久久亚洲一区| 欧美老女人xx| 色老板免费视频| 日韩欧美综合| 一区二区欧美亚洲| 丰满少妇在线观看资源站| 成人免费在线电影网| 日韩三区在线观看| 91小视频在线播放| 欧美日韩视频免费看| 在线视频观看一区| 国产黄色特级片| 自拍偷拍欧美视频| 欧美日韩国产综合新一区| 无码熟妇人妻av在线电影| 1024在线播放| 亚洲女同一区二区| 喜爱夜蒲2在线| 黄色在线论坛| 亚洲天天做日日做天天谢日日欢 | 一区二区三区在线看| 香蕉视频在线网址| 国产精品剧情| 一区二区三区欧美视频| 伊人再见免费在线观看高清版| 欧美激情视频在线播放| 国产精品麻豆一区二区| 中文字幕免费高| 中文在线手机av| 亚洲图片欧美视频| 18禁网站免费无遮挡无码中文| 金瓶狂野欧美性猛交xxxx| 亚洲自拍偷拍麻豆| 妞干网在线视频观看| 国产欧洲在线| 色呦呦日韩精品| 手机视频在线观看| 亚洲精品第一| 欧美精品一区二区三区在线| jizz日本免费| 不卡中文字幕| 久久亚洲精品成人| 不卡的免费av| 久久激情综合| 亚洲一区二区三| 亚洲欧美激情另类| 久久精品夜夜夜夜久久| 亚洲一区二区三区免费观看| 99视频免费在线观看| 亚洲国产日产av| 国产偷人视频免费| 99re8精品视频在线观看| 欧美成人免费网站| www在线观看免费视频| 国产精品99久久| 欧美极品少妇xxxxⅹ裸体艺术| 国产一级精品视频| 麻豆精品一区二区三区| 成人av网站观看| 久草在线网址| 一区二区在线观看免费视频播放| 久久久久久久久久久99| 日本免费一区二区三区等视频| 日韩片之四级片| 51妺嘿嘿午夜福利| 国产精品v欧美精品v日本精品动漫| 欧美综合在线第二页| 91theporn国产在线观看| 成人av影院在线| 亚洲欧洲精品一区二区三区波多野1战4 | 丰满岳乱妇一区二区三区| 欧美日韩高清在线一区| 久久亚洲天堂| 色综合久久久久综合体桃花网| 色91精品久久久久久久久| 色天天色综合| 欧美成人免费一级人片100| 波多野结衣啪啪| 成人一道本在线| 中文字幕日韩一区二区三区| 人狥杂交一区欧美二区| 91麻豆精品国产91久久久久久久久 | 成人毛片免费| 亚洲美女精品成人在线视频| 粉嫩av性色av蜜臀av网站| 日韩在线a电影| 精品一区二区三区自拍图片区| 国产秀色在线www免费观看| 狠狠躁夜夜躁久久躁别揉| 中文字幕久久久久久久| 日本女优一区| 国产精品www网站| 国产成人手机在线| 亚洲乱码国产乱码精品精98午夜 | 成人午夜激情在线| 一区二区三区欧美在线| 3d性欧美动漫精品xxxx软件| 亚洲国产精品免费| 久久久久免费看| 韩国av一区二区三区在线观看| 少妇免费毛片久久久久久久久| 成人影院在线视频| 亚洲国产97在线精品一区| 欧美日韩在线观看免费| 激情综合亚洲精品| 亚洲自拍的二区三区| 国产人妖一区| 中文字幕亚洲一区在线观看| 欧美brazzers| 国产婷婷色一区二区三区四区| 日韩欧美一区三区| 日韩av不卡一区| 57pao成人永久免费视频| 蜜桃91麻豆精品一二三区| 亚洲另类在线制服丝袜| 可以看的av网址| 欧美深夜福利| 国产伦精品一区二区三毛| 任你弄在线视频免费观看| 日韩一区二区三区视频| 欧美人与禽zozzo禽性配| 国产精品自拍毛片| 男人天堂av片| 夜色77av精品影院| 国产精品成人久久久久| 888av在线| 欧美乱妇20p| 无码黑人精品一区二区| 国产精品一二三四区| 日本一区午夜艳熟免费| 欧美一级全黄| 国产精品久久不能| 国产精品久久麻豆| 亚洲大尺度美女在线| 国产成人在线免费视频| 国产亲近乱来精品视频| 亚洲a级黄色片| 国产综合自拍| 久久亚洲一区二区| 2019年精品视频自拍| 久久伊人精品一区二区三区| 丰满少妇一级片| 午夜精品久久久久久久久| 制服丝袜第二页| 日本在线不卡视频| 在线播放 亚洲| 哺乳挤奶一区二区三区免费看| 97香蕉超级碰碰久久免费软件| 国产在线你懂得| 91精品国产综合久久久蜜臀图片 | 国产青春久久久国产毛片| 欧美13videosex性极品| 中文字幕日韩有码| 亚洲第一视频在线| 91国偷自产一区二区三区观看| 制服丨自拍丨欧美丨动漫丨| 高清不卡在线观看| 大香煮伊手机一区| 欧美一区二区三区另类| 欧美另类一区| 日韩亚洲精品在线观看| 日韩av观看网址| 1区2区3区在线视频| 亚洲丝袜在线视频| 乱精品一区字幕二区| 欧美日韩激情一区| 国产精品自拍99| 综合网在线视频| 在线观看福利片| 高清久久久久久| caoporm在线视频| 性欧美xxxx大乳国产app| 中文字幕av日韩精品| 亚洲国产合集| 国产精品我不卡| 亚洲综合视频| 国产97在线|亚洲| 成年人国产在线观看| 最近日韩中文字幕中文| 免费黄网站在线观看| 欧美刺激脚交jootjob| 中文字幕免费在线看| 精品美女国产在线| 欧美日韩中文字幕在线观看| 亚洲国产精品成人久久综合一区| 国产女人18毛片水真多18| 麻豆精品精品国产自在97香蕉| 女性女同性aⅴ免费观女性恋| 欧美另类女人| 一本—道久久a久久精品蜜桃| 国产精品密蕾丝视频下载| 精品国产91亚洲一区二区三区www| 不卡一区视频| 国产精品网站视频| av一区在线播放| 日韩美女在线播放| 欧美aaaaa性bbbbb小妇| 国内精品久久久久伊人av| 日本aa在线| 欧美国产乱视频| 99自拍视频在线观看| 久久夜色精品亚洲噜噜国产mv| 91福利在线视频| 中文字幕日韩欧美在线| 91精品国产91久久久久游泳池 | 亚洲精品美女网站| 懂色av蜜臀av粉嫩av分享吧| 91精品国产一区二区| 91tv国产成人福利| 91精品在线麻豆| www.xxxx国产| 精品少妇一区二区三区| 亚洲黄色a级片| 精品久久久久久久久久久久久久久久久 | 成人网页在线观看| 亚洲精品乱码久久久久久蜜桃欧美| 国产精品资源在线看| 丰满人妻一区二区三区免费视频棣| 国产乱子轮精品视频| 91成人在线观看喷潮蘑菇| 成人性色生活片| 99久久人妻精品免费二区| 99久久777色| 人人妻人人藻人人爽欧美一区| 久久美女艺术照精彩视频福利播放 | 国产av一区二区三区| 日韩精品一区二区在线| 黄色aaa大片| 亚洲欧美日韩国产中文专区| 国产天堂在线| 久久精品国产亚洲| 性欧美高清come| 91成人免费观看网站| 欧美片第1页| 国产精品久久二区| 久久国际精品| 精品久久蜜桃| 成人在线丰满少妇av| 国产精品啪啪啪视频| 亚洲福利专区| 日本一极黄色片| 国精产品一区一区三区mba视频| 粗大的内捧猛烈进出视频| 99精品一区二区| av在线免费播放网址| 亚洲国产乱码最新视频 | 91精品国产闺蜜国产在线闺蜜| 亚洲一区国产视频| 国产一级片毛片| 欧美喷水一区二区| 色哟哟中文字幕| 中文在线不卡视频| 乱插在线www| 国产精品国产亚洲伊人久久| 国产日韩一区二区三免费高清| 国产尤物99| 欧美hd在线| 国产原创popny丨九色 | 成人精品一区二区三区电影黑人| aiai久久| 亚洲午夜精品福利| 日韩视频久久| 亚洲免费黄色录像| 91视频91自| 国产女人被狂躁到高潮小说| 欧美性猛交xxxx黑人| 99在线精品视频免费观看软件| 亚洲欧美精品一区| av影院在线免费观看| 国产欧美日韩综合精品| 秋霞影院一区二区三区| 男女激烈动态图| 日韩 欧美一区二区三区| 在线观看一区二区三区四区| 国产精品视频观看| 日本一区二区三区精品| 精品日韩99亚洲| 日本a级在线| 国产精品电影观看| 精品福利一区| 成年人深夜视频| 久久 天天综合| 日本综合在线观看| 欧美日韩中文字幕| 国产福利小视频| 欧美xxxx综合视频| 国产精品蜜月aⅴ在线| 蜜桃久久影院| 日韩午夜av| 91视频在线免费| 夜夜嗨av一区二区三区网页| 伊人精品一区二区三区| 亚洲人成绝费网站色www| 国产99在线| 国产一级二级三级精品| 激情综合电影网| 日本xxxx免费| 亚洲综合在线五月| www.五月婷| 欧美黑人性生活视频| 国产在线不卡一区二区三区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 麻豆精品网站| 亚洲精品成人无码| 色婷婷亚洲一区二区三区| 精品视频一二区| 国产精品99久久99久久久二8| 亚洲人成伊人成综合图片| 欧美精品一区免费| 91丨九色丨黑人外教| 国产精品久久久久久久妇| 日韩精品在线播放| 美脚恋feet久草欧美| 欧美精品一区二区三区在线四季 | 国产日韩欧美中文| 欧美第一精品| 欧洲美女亚洲激情| 亚洲免费视频成人| 亚洲成a人片77777精品| 久久久久久久久久久久久久久久久久av| 一区二区三区欧洲区| 欧美精品久久久久久久自慰| av亚洲产国偷v产偷v自拍| 韩国av中文字幕| 国产亚洲欧美视频| 国产麻豆精品| 日韩成人三级视频| 99国产精品久久久久久久久久| 91玉足脚交嫩脚丫在线播放| 亚洲色图35p| 亚洲视频自拍| 国产一级不卡视频| 26uuu亚洲综合色欧美 | 欧美成va人片在线观看| gogo久久| 奇米视频888战线精品播放| 美女免费视频一区二区| 国产精品 欧美激情| 亚洲福利在线播放| 成人在线网站| 青草全福视在线| 91视频.com| 国产精品怡红院| 97在线看免费观看视频在线观看| 国产欧美日韩精品一区二区三区| 国产精品久久久毛片| 一区二区三区在线看| 久久精品a一级国产免视看成人 | eeuss鲁片一区二区三区| 欧美色图另类小说| 亚洲日本电影在线| 香蕉av一区二区三区| 国产裸体写真av一区二区| 国精品一区二区三区| 国产毛片欧美毛片久久久| 欧美xxxxxxxx| 99久久精品一区二区成人| 丁香色欲久久久久久综合网| 国产亚洲精品免费| 久久天堂av| 91手机视频在线观看| 精品96久久久久久中文字幕无| 国产精品高清无码在线观看| 在线观看91av| 丝袜诱惑一区二区| ijzzijzzij亚洲大全| 久久久久久麻豆| 农村少妇久久久久久久| 国产精品免费网站|