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

深入淺出Dotnet Core的項目結構變化

開發 項目管理
今天,就著這個點,寫一下Dotnet Core的主要類型的項目結構,以及之間的轉換和演化。

 [[375510]]

本文轉載自微信公眾號「老王Plus」,作者老王Plus的老王 。轉載本文請聯系老王Plus公眾號。

前幾天Review一個項目的代碼,發現非常基礎的內容,也會有人理解出錯。

今天,就著這個點,寫一下Dotnet Core的主要類型的項目結構,以及之間的轉換和演化。

一、最基礎的應用Console

控制臺應用,是Dotnet Core乃至前邊的Dotnet Framework中,最基礎的項目。

我們來創建一個Console項目看一下:

  1. % dotnet new console -o demo 

創建完成后,打開工程。工程里只有一個文件Program.cs,里面只有一個方法Main:

  1. namespace demo 
  2.     class Program 
  3.     { 
  4.         static void Main(string[] args) 
  5.         { 
  6.             Console.WriteLine("Hello World!"); 
  7.         } 
  8.     } 

在Dotnet Core所有類型的項目中,Program.cs都是最開始的入口,main方法,也是最開始的入口方法。

這個工程中,還有一個文件也需要了解一下,demo.csproj,這是這個項目的定義文件:

  1. <Project Sdk="Microsoft.NET.Sdk"
  2.  
  3.   <PropertyGroup> 
  4.     <OutputType>Exe</OutputType> 
  5.     <TargetFramework>net5.0</TargetFramework> 
  6.   </PropertyGroup> 
  7.  
  8. </Project> 

這里面,OutputType告訴編輯器這個工程編譯后可以直接執行,TargetFramework定義運行的框架。

注意,這個框架字串有個對照表:net5.0對應的是.Net 5.0;如果你想用Dotnet Core 3.1,對應的字符串是netcoreapp3.1,而不是net3.1。準確的說,3.1是.Net Core 3.1,而5.0是.Net 5.0。不用太糾結,微軟的命名規則而已。

這就是控制臺應用Console的初始狀態。

下面,我們看看這個工程如何轉變為Web應用。

二、轉為Web應用

第一件事,我們需要改動demo.csproj項目定義文件。

Web應用跑在WebHost上面,而不是從直接執行。所以,我們需要把OutputType項去掉。

另外,SDK也需要改一下。Console我們用的是Microsoft.NET.Sdk,Web應用要改成Microsoft.NET.Sdk.Web:

  1. <Project Sdk="Microsoft.NET.Sdk.Web"
  2.  
  3.   <PropertyGroup> 
  4.     <TargetFramework>net5.0</TargetFramework> 
  5.   </PropertyGroup> 
  6.  
  7. </Project> 

改完保存。

這時候,應該可以注意到,項目的發生了變化:

  • 依賴的框架從Microsoft.NETCore.App變成了兩個,多了一個Microsoft.AspNetCore.App,表明現在這是一個Asp.net Core的應用;
  • 項目中自動生成了一個目錄Properties,下面多了一個文件launchSettings.json。這個文件大家應該很熟悉,就不解釋了。

這時候,應用已經從Console轉為了Web應用。

Asp.Net Core框架提供了Host供Web加載。我們需要做的,是把Host構建器加到程序中。通常,我們需要兩個構建器:

  • 通用主機 Generic host builder
  • Web主機 Web host builder

1. 配置通用主機

通用主機在Microsoft.Extensions.Hosting.Host中,主要給Web應用提供以下功能:

  • 依賴注入
  • 日志
  • 配置 IConfiguration
  • IHostedService實現

加入通用主機很簡單,就一個方法CreateDefaultBuilder:

  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         Host.CreateDefaultBuilder(args) 
  5.             .Build() 
  6.             .Run(); 
  7.     } 

2. 配置Web主機

Web主機才是真正與Web相關的內容,主要實現:

  • Http支持
  • 設置Kestrol服務器為Web服務器
  • 添加IIS支持

加入Web主機,也是一個方法ConfigureWebHostDefaults:

  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         Host.CreateDefaultBuilder(args) 
  5.             .ConfigureWebHostDefaults(webBuilder => 
  6.             { 
  7.             }) 
  8.             .Build() 
  9.             .Run(); 
  10.     } 

這個方法用來添加Http請求管道并注入我們需要的服務。而注入我們需要的服務,就是我們最常見的Startup.cs的內容。

下面,我們先創建Startup.cs,

  1. namespace demo 
  2.     public class Startup 
  3.     { 
  4.     } 

在前邊ConfigureWebHostDefaults中,加入Startup,并補齊代碼:

  1. class Program 
  2.     static void Main(string[] args) 
  3.     { 
  4.         Host.CreateDefaultBuilder(args) 
  5.             .ConfigureWebHostDefaults(webBuilder => 
  6.             { 
  7.                 webBuilder.UseStartup<Startup>(); 
  8.             }) 
  9.             .Build() 
  10.             .Run(); 
  11.     } 

這就是Program.cs中的完整代碼了。整理一下,就是我們常見的樣子:

  1. public class Program 
  2.     public static void Main(string[] args) 
  3.     { 
  4.         CreateHostBuilder(args).Build().Run(); 
  5.     } 
  6.  
  7.     public static IHostBuilder CreateHostBuilder(string[] args) => 
  8.         Host.CreateDefaultBuilder(args) 
  9.             .ConfigureWebHostDefaults(webBuilder => 
  10.             { 
  11.                 webBuilder.UseStartup<Startup>(); 
  12.             }); 

不過,到這兒還不能正常運行,因為Startup.cs現在還是空的。

3. 補齊Startup類

Startup類在Asp.net Core應用中有著重要的作用。這個類用于:

  • 使用DI容器注入服務
  • 設置Http Request管道以插入中間件

下面我們補齊所需的方法:

  1. namespace demo 
  2.     public class Startup 
  3.     { 
  4.         public void ConfigureServices(IServiceCollection services) 
  5.         { 
  6.         } 
  7.         public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  8.         { 
  9.         } 
  10.     } 

運行,到這兒,Web應用已經可以正常啟動了。

4. 給應用添加路由

Web應用啟動了,但里面什么也沒有,是空的。

要訪問Web應用中的任何資源,需要配置路由。這兒的路由,基本上就是傳入Http請求與資源之間的映射。

我們可以用下面的中間件來啟動路由:

  • UseRouting
  • UseEndpoints

加一下試試:

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  2.     app.UseRouting(); 
  3.     app.UseEndpoints(endpoint => { 
  4.         endpoint.MapGet("/", async context => 
  5.         { 
  6.             await context.Response.WriteAsync("Hello from Demo"); 
  7.         }); 
  8.     }); 

這次運行,瀏覽器中就看到正確的輸出了。

我們可以用MapGet映射更多資源:

  1. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  2.     app.UseRouting(); 
  3.     app.UseEndpoints(endpoint => 
  4.     { 
  5.         endpoint.MapGet("/", async context => 
  6.         { 
  7.             await context.Response.WriteAsync("Hello from Demo"); 
  8.         }); 
  9.         endpoint.MapGet("/test", async context => 
  10.         { 
  11.             await context.Response.WriteAsync("Hello from Demo.Test"); 
  12.         }); 
  13.         endpoint.MapGet("/about", async context => 
  14.         { 
  15.             await context.Response.WriteAsync("Hello from Demo.About"); 
  16.         }); 
  17.     }); 

到這兒,我們成功地把Console應用轉為了Web應用。

三、延伸內容

上面完成的Web應用,算是Web應用中的基礎。基于這個內容,我們還可以擴展到別的項目結構。

1. 改為MVC應用

需要在ConfigureServices中注入AddControllersWithViews,并在Configure中添加MapDefaultControllerRoute:

  1. public class Startup 
  2.     public void ConfigureServices(IServiceCollection services) 
  3.     { 
  4.         services.AddControllersWithViews(); 
  5.     } 
  6.     public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  7.     { 
  8.         app.UseRouting(); 
  9.         app.UseEndpoints(endpoint => 
  10.         { 
  11.             endpoint.MapDefaultControllerRoute(); 
  12.         }); 
  13.     } 

2. 改為WebAPI應用

需要注入AddControllers和MapControllers:

  1. public class Startup 
  2.     public void ConfigureServices(IServiceCollection services) 
  3.     { 
  4.         services.AddControllers(); 
  5.     } 
  6.     public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  7.     { 
  8.         app.UseRouting(); 
  9.         app.UseEndpoints(endpoint => 
  10.         { 
  11.             endpoint.MapControllers(); 
  12.         }); 
  13.     } 

3. 改為Razor應用

需要注入AddRazorPages和MapRazorPages:

  1. public class Startup 
  2.     public void ConfigureServices(IServiceCollection services) 
  3.     { 
  4.         services.AddRazorPages(); 
  5.     } 
  6.     public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 
  7.     { 
  8.         app.UseRouting(); 
  9.         app.UseEndpoints(endpoint => 
  10.         { 
  11.             endpoint.MapRazorPages(); 
  12.         }); 
  13.     } 

四、總結

看下來,其實過程很簡單。通過這種方式,能更進一步理解Dotnet Core的項目結構以及應用的運行過程。

希望對大家能有所幫助。

?

本文的配套代碼在:https://github.com/humornif/Demo-Code/tree/master/0038/demo

 

責任編輯:武曉燕 來源: 老王Plus
相關推薦

2021-03-16 08:54:35

AQSAbstractQueJava

2011-07-04 10:39:57

Web

2019-11-11 14:51:19

Java數據結構Properties

2009-11-30 16:46:29

學習Linux

2022-12-02 09:13:28

SeataAT模式

2017-07-02 18:04:53

塊加密算法AES算法

2012-05-21 10:06:26

FrameworkCocoa

2019-01-07 15:29:07

HadoopYarn架構調度器

2021-07-20 15:20:02

FlatBuffers阿里云Java

2022-09-26 09:01:15

語言數據JavaScript

2022-01-13 09:38:25

Android架構設計

2023-03-20 09:48:23

ReactJSX

2019-11-14 09:53:30

Set集合存儲

2009-12-25 15:49:43

Linux rescu

2018-11-09 16:24:25

物聯網云計算云系統

2021-04-27 08:54:43

ConcurrentH數據結構JDK8

2022-11-09 08:06:15

GreatSQLMGR模式

2012-02-21 13:55:45

JavaScript

2022-10-31 09:00:24

Promise數組參數

2009-11-18 13:30:37

Oracle Sequ
點贊
收藏

51CTO技術棧公眾號

大荫蒂性生交片| 国产精品福利在线观看| 91传媒免费看| 国产精品久久国产精麻豆96堂| yiren22亚洲综合| 国产精品青草综合久久久久99| 青青草原成人在线视频| 精品人妻一区二区三区蜜桃视频| 性感美女一区二区在线观看| 久久精品一级爱片| 国产精品露脸自拍| 免费高清在线观看电视| 欧美日本三级| 欧美日韩国产综合视频在线观看中文 | 亚洲最大免费视频| 成人性教育av免费网址| 国产精品久久久久久久久图文区| 97人摸人人澡人人人超一碰| 99免费在线观看| 波多野结衣在线播放一区| 在线观看欧美精品| 男人日女人的bb| 神马电影在线观看| 免费成人av资源网| 欧美人在线观看| 91久久免费视频| 日韩欧美中文字幕在线视频 | 一本色道久久88综合亚洲精品ⅰ| 亚洲va综合va国产va中文| 日韩特级毛片| 中文字幕在线观看不卡视频| 精品亚洲欧美日韩| 伊人免费在线观看| 在线亚洲自拍| 精品国产欧美成人夜夜嗨| 亚洲天堂2024| 欧美xxxx性| 五月天亚洲婷婷| 一区不卡字幕| 黄色在线免费观看大全| 九一久久久久久| 欧美亚洲日本网站| 欧美黄色一级网站| 欧美精品系列| 日韩av中文在线| 欧美激情国产精品日韩| 日本电影在线观看| 国产精品久久毛片| 久久精品女人的天堂av| 99久久精品国产成人一区二区 | 中文字幕一区二区三区不卡在线 | 国产一级精品视频| 在线一区电影| 国产一区二区成人| 精品人妻一区二区三| 日韩网站中文字幕| 欧美日韩免费看| www.国产在线视频| caopon在线免费视频| 国产精品美女久久久久久久久久久| 国产一区免费视频| 乱色精品无码一区二区国产盗| 美洲天堂一区二卡三卡四卡视频| 国产成人午夜视频网址| 在线观看亚洲欧美| 欧美成人精品| 欧美成人网在线| av资源在线免费观看| 久9久9色综合| 亚洲欧美日本另类| 我和岳m愉情xxxⅹ视频| 1313精品午夜理伦电影| 日韩久久久精品| 激情小说欧美色图| 麻豆国产一区二区三区四区| 欧美一激情一区二区三区| 九九热免费在线观看| 男女啪啪999亚洲精品| 欧美日韩三级在线| av在线网址导航| 91丨精品丨国产| 欧美二区乱c少妇| 黄色小视频免费网站| 欧美aaa级| 91精品国产综合久久精品app | 亚洲一区二区动漫| 欧美中文在线视频| 蜜臀99久久精品久久久久小说| 免费一区视频| 国产精品女人久久久久久| 中文字幕日韩经典| 国产综合色产在线精品| www.久久爱.cn| 日本高清视频免费观看| 波多野结衣在线一区| 精品综合久久久| 国产日产精品久久久久久婷婷| 久久久久久电影| 亚洲精品国产系列| 男人和女人做事情在线视频网站免费观看| 亚洲人成伊人成综合网小说| www国产无套内射com| 高清在线视频不卡| 欧美午夜精品在线| 天堂网在线免费观看| 久久人体av| 欧美大片一区二区三区| 精品夜夜澡人妻无码av| 日韩极品在线| www欧美日韩| 国产精品黄色网| 麻豆精品在线观看| 国产欧美日韩综合精品二区| 国产免费av高清在线| 亚洲精品日韩一| 国产成人黄色片| 中文幕av一区二区三区佐山爱| 精品成人私密视频| 9.1片黄在线观看| 欧美深夜福利| 国产v综合ⅴ日韩v欧美大片| 99精品久久久久久中文字幕| 久久在线观看免费| 超碰人人爱人人| yy6080久久伦理一区二区| 欧美大片一区二区| 毛片久久久久久| 激情国产一区| 国产精品成人av性教育| 亚洲不卡免费视频| 欧美韩日一区二区三区四区| 国产九九九九九| 国产一区二区av在线| 亚洲欧美国产一本综合首页| 四虎影院中文字幕| 日韩avvvv在线播放| 超碰97网站| 日本高清视频在线观看| 岛国av一区二区| 午夜av中文字幕| 色狮一区二区三区四区视频| 国产精品久久久久国产a级| 免费一级毛片在线观看| 精品二区三区线观看| 艳妇乳肉豪妇荡乳xxx| 极品裸体白嫩激情啪啪国产精品| 91社区国产高清| 国产视频一区二区| 91精品国产一区二区| 国产精品夜夜夜爽阿娇| 久色婷婷小香蕉久久| 一区二区三区四区五区视频 | 亚洲最大福利视频| 亚洲综合图区| 日韩精品在线一区| 国产一级淫片免费| 成人精品免费网站| 欧美 日韩 国产 高清| 久久午夜影院| 日韩男女性生活视频| 国产h视频在线观看| 欧美日韩午夜在线视频| 国产精品白丝喷水在线观看| 国产精品538一区二区在线| www.欧美黄色| 亚洲福利天堂| 国产精品啪视频| av片在线观看免费| 亚洲国产成人精品一区二区 | 欧美性爽视频| 亚洲精品电影网| 亚洲精品国产精品乱码视色| 成人免费一区二区三区视频 | 亚洲色图欧洲色图| 95视频在线观看| 美日韩精品视频| 天天综合中文字幕| 国产伦理久久久久久妇女| 欧洲亚洲免费视频| 日本高清中文字幕在线| 欧美r级电影在线观看| 日韩精品在线免费视频| 欧美国产日韩在线观看| japan高清日本乱xxxxx| 亚洲自啪免费| 26uuu成人| 日韩极品在线| 91精品视频一区| 绿色成人影院| 久久久av亚洲男天堂| 亚洲 另类 春色 国产| 欧美日韩一区不卡| 久久久国产精品黄毛片| 国产午夜精品理论片a级大结局 | 国产精品视频免费看| 日韩久久久久久久久久久| 国产精品一区亚洲| 国产一区一区三区| 亚洲精华一区二区三区| 成人午夜在线影院| 国产精品专区免费| 欧美成人免费播放| a天堂中文在线| 精品国产髙清在线看国产毛片| 一级片免费在线播放| 亚洲一级二级三级在线免费观看| 成人在线一级片| 成人性生交大片免费看中文 | www.激情成人| 青青草原国产在线视频| 亚洲一区国产一区| 欧美视频在线第一页| 久久国产电影| 欧美日韩在线一二三| 成人性生交大片免费看96| 国产精品一区=区| www.com.cn成人| 97视频免费在线看| 中文字幕有码在线视频| 在线视频国产日韩| 三区在线观看| 亚洲成人免费网站| 国产乱码精品一区二三区蜜臂 | 疯狂做受xxxx高潮欧美日本| 中文字幕91视频| 欧美国产精品一区二区| 亚洲第一页av| 99久久国产综合精品色伊| 麻豆精品国产传媒| 国产一区二区三区国产| 在线免费观看av的网站| 日韩精品成人一区二区三区| a在线视频观看| 中文亚洲字幕| 国产精品专区在线| 亚洲精品影院在线观看| 亚洲国产成人精品无码区99| 中文字幕一区二区三区欧美日韩 | 亚洲国产精品成人av| 国产黄色小视频在线观看| 欧美日韩国产一区二区三区地区| 最新国产中文字幕| 欧美撒尿777hd撒尿| 波多野结衣视频观看| 色94色欧美sute亚洲线路一久| 91在线视频在线观看| 欧美午夜精品久久久久久浪潮| 国产毛片aaa| 日韩欧美在线看| 无码一区二区三区| 欧美视频中文字幕| 亚洲熟妇av乱码在线观看| 欧美三级日韩三级国产三级| 波多野结衣一区二区在线 | 波多野结衣作品集| 久久先锋资源| 国产九九热视频| 精一区二区三区| 日韩精品视频网址| 丰满放荡岳乱妇91ww| 欧美久久久久久久久久久| 高清成人在线观看| 精品一区二区三区四区五区六区| 99久久精品99国产精品| 亚洲 小说 欧美 激情 另类| 亚洲国产成人一区二区三区| 国产探花在线视频| 一区二区三区四区不卡在线| 国产又大又黑又粗免费视频| 色婷婷久久久亚洲一区二区三区| 黄色av一区二区| 在线综合视频播放| 四虎精品一区二区三区| 亚洲性生活视频| 菠萝菠萝蜜在线视频免费观看| 欧美精品福利视频| 久久sese| 成人在线免费观看视视频| 国产精品色在线网站| 日韩精品一区二区三区丰满| 色综合蜜月久久综合网| 男人添女人荫蒂免费视频| 日韩精品福利网| 日本精品一二三| 国产亚洲精品超碰| 亚洲综合久久av一区二区三区| 亚洲一区在线电影| 一级黄色av片| 精品国产伦一区二区三区观看体验 | 久久久久高清精品| 青青青在线免费观看| 欧美性猛交xxxxx水多| 国产一区二区三区四区视频 | 中文字幕日本在线观看| 欧美国产视频一区二区| 欧美男体视频| 99九九视频| 成人激情视频| av免费观看国产| 激情都市一区二区| 日韩av在线看免费观看| 亚洲美女少妇撒尿| 久久影视中文字幕| 亚洲电影免费观看高清完整版在线观看| 成人一区二区不卡免费| 久久久亚洲精品视频| www.国产精品| 久久一区二区精品| 欧美另类女人| 日韩av自拍偷拍| 国产午夜一区二区三区| 日本网站在线播放| 欧美一区二区美女| 网友自拍视频在线| 欧美综合在线观看| 成人高潮视频| 日韩一级特黄毛片| 久久99国产精品成人| 91麻豆精品国产91久久综合| 精品久久久久久亚洲国产300 | 国产香蕉久久| 欧美不卡在线一区二区三区| 在线观看亚洲| 少妇愉情理伦片bd| 亚洲日本va在线观看| 又骚又黄的视频| 亚洲香蕉伊综合在人在线视看| 毛片电影在线| 狠狠色综合一区二区| 黄色成人在线网址| 亚洲区 欧美区| 亚洲免费av网站| www.av网站| 欧美精品免费播放| 日本一区二区乱| 成人黄色片免费| 成人在线视频一区二区| 久久精品第一页| 精品剧情在线观看| 亚洲精品天堂| 国产乱子伦精品| 亚洲精品日本| 欧美特黄一区二区三区| 色婷婷综合久久久中文字幕| 黄色大片在线看| 国产成人综合久久| 成人看的羞羞网站| 午夜免费看视频| 亚洲色图一区二区三区| 国产suv精品一区二区69| 欧美另类高清videos| 99久久人爽人人添人人澡| 精品久久久久久无码中文野结衣| 成人av午夜电影| 日本视频在线观看免费| 亚洲午夜精品久久久久久久久久久久| 欧美亚洲韩国| 亚洲看片网站| 国产成人精品综合在线观看| 久久久99精品| 亚洲免费高清视频| 成人精品三级| 中国一级黄色录像| 成人少妇影院yyyy| 天天操天天操天天操天天| 亚洲无线码在线一区观看| 日韩成人一区| av在线免费观看国产| 91视频免费观看| 在线观看视频中文字幕| 欧美另类精品xxxx孕妇| 久久人人爽人人爽人人片av不| 日韩亚洲在线视频| 日韩毛片视频在线看| 少妇av在线播放| 国产精品高清在线观看| 91精品观看| 182在线视频| 欧美三级日韩在线| 国模雨婷捆绑高清在线| 欧美亚洲国产免费| 狠狠色丁香婷婷综合| 日韩成人高清视频| 亚洲夜晚福利在线观看| 欧美h版在线观看| 国产成人a亚洲精v品无码| 中文字幕视频一区| 无码国产精品高潮久久99| 国产欧美精品一区二区三区-老狼| 在线精品视频在线观看高清| 白白色免费视频| 欧美成人一区二区三区| 成人免费无遮挡| 影音先锋男人的网站| 久久人人超碰精品| 亚洲第一视频在线播放| 国产精品视频免费在线观看| 亚洲区第一页| 外国一级黄色片| 一本色道久久88综合亚洲精品ⅰ|