欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1

程序员文章站 2022-05-31 17:46:22
创建好项目后,解决方案资源管理器窗口里我们看到,增加了不少文件夹及文件,如下图所示: 在解决方案文件夹中,找到项目文件夹,该文件夹又包含五个子文件夹 -Models、Controllers、Views、Properties、及wwwroot;Models、Controllers、Views对应MVC ......

  创建好项目后,解决方案资源管理器窗口里我们看到,增加了不少文件夹及文件,如下图所示:

  《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

  在解决方案文件夹中,找到项目文件夹,该文件夹又包含五个子文件夹 -models、controllers、views、properties、及wwwroot;models、controllers、views对应mvc模型,控制器和视图。 properties文件夹包含一个文件(launchsettings.json),它控制visual studio如何运行和调试应用程序。 wwwroot文件夹很特别,因为它是应用程序中浏览器可以直接访问的唯一的文件夹,你可以在这里面存放应用需要用到的css,javascript,图片或静态html文件。 浏览器无法访问wwwroot之外的文件。虽然磁盘上存在wwwroot和properties文件夹,但您可以看到解决方案资源管理器将它们显示为特殊节点,不按字母顺序排列,位于项目的顶部区域。 在项目中还有两个特殊的节点,dependencies和connected services,它们在磁盘上没有相应的文件夹。 它们显示项目所有依赖项的集合,例如nuget包、客户端依赖项和项目所依赖的远程服务。在目根目录中,还有几个json文件-appsettings.json、bundleconfig.json和bower.json。 它们提供了各种配置设置,其中一些在运行时使用,另一些在编译时用于构建应用程序。(bower是一个客户端资产管理系统,用于获取css和javascript库。 由于bower被放弃维护,asp.net团队正在探索替代方案。 bower.json文件很可能会在后面的版本中从默认模板中删除并替换)。项目中最重要的文件是webapplication2.csproj,因为它描述了如何构建你的项目。 visual studio未在解决方案中显式列出csproj文件,但可以在项目名称右键并选择“编辑”菜单对其进行编辑。visual studio还在项目文件夹中列出了两个c#文件-program.cs和startup.cs。 在后面的章节,将介绍这两个类是如何实现配置和运行您的应用程序的。

 

csproj项目文件:定义依赖项

  csproj文件是.net应用程序的项目文件,包含.net工具构建项目所需的详细信息。 它定义了正项目的类型(web应用程序、控制台应用程序、类库),项目的目标平台(.net core、.net framework 4.5、mono等),以及项目所依赖的nuget包。项目文件一直是.net应用程序的核心,asp.net core对其进行了调整,使其更易于阅读和编辑。 这些调整如下:

  1、没有guid  - 以前,全局唯一标识符(guid)大量用于项目文件中;

  2、隐式文件包括 (implicit file includes—)- 以前,项目中的每个文件都必须列在csproj文件中,项目才能编译; 现在,文件会被自动编译;

  3、没有nuget包dll的路径 - 以前,csproj必须包含dll的路径,以及在packages.xml文件中列出依赖项。 现在,您可以直接在csproj中引用nuget包,不需要指定磁盘上路径;

 

 

  这些变化使项目文件更加简洁,下图显示了整个csproj文件:

  《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

 

 

  上图中project元素的sdk属性设定编译项目的默认设置,targetframework元素设定应用程序的运行框架,对于.net core 2.0项目,值为netcoreapp2.0; 对于完整的.net framework 4.6.1项目,值为net461。对于简单的应用程序,我们不需要更改项目文件,如果你想编辑csproj文件,不用像之前的版本那样先关闭项目,直接用前面提到的方法编辑即可。对项目文件最常见的更改是添加项目引用(packagereference元素下nuget包),.net core项目默认情况下,只引用一个nuget包-microsoft.aspnetcore.all,它是一个元数据包(元数据包是一个不包含代码的nuget包,它引用一个或多个其他nuget包,通过将元数据包添加到应用程序,可以方便地和隐式地添加它的所有包引用),包含了asp.net core 2.0相关的所有软件包,但这不意味着,应用将使用所有的asp.net core包。在asp.net core 2.1中,microsoft.aspnetcore.app元数据包引用默认已经安装上。 您可以在https://github.com/aspnet/announcements/issues/287 查看microsoft.aspnetcore.app和所有元数据包的区别。

 

  简化后的项目文件更易手工编辑,这有利于开发跨平台应用。如果仍然使用visual studio,你依然可以像以前一样添加项目引用,管理nuget包等。有关csproj格式更改的更多详细信息,可参阅https://docs.microsoft.com/en-us/dotnet/core/tools/csproj。

 

 

program类:构建web主机

 

 

  所有asp.net core应用程序的启动方式与.net控制台应用程序相同 - 使用program.cs文件。 此文件包含静态 main函数(这是控制台应用程序的标准特性)。 应用中必须包含这个方法,它在启动web应用程序时调用。 在asp.net core应用程序中,它用于构建和运行一个iwebhost实例,如下图所示,它显示了默认的program.cs文件。 iwebhost是asp.net core应用程序的核心,包含应用程序配置和侦听请求的kestrel服务器,并返回客户端请求回应。

《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

  

  main函数包含创建web服务器并开始侦听请求所需的基本初始化代码,在实例化iwebhost之前,通过createdefaultbuilder方法定义iwebhost的配置。应用程序的大部分配置都发生在createdefaultbuilder方法中,它还将一些职责委托给一个单独的类startup。 这个类通过泛型方法usestartup<> 引用,在这里可以配置应用程序的服务和中间件间。

  这里有不少人提出这样的疑问,为什么要把配置分拆到两个类中?一般来说,program类负责应用的基础结构,例如:http服务器、与iis集成、配置源;startup定义应用将使用哪些功能、组件以及中间件。如下图所示:

《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

 

 

  两个不同的asp.net core 应用程序的program类通常是相似的,但startup类通常会有很大不同(尽管它们通常遵循类似的模式)。 随着应用程序的增长,很少会修改program,但是,会经常修改startup。 例如,向项目中添加新的nuget依赖项,通常需要在startup添加相应的代码才能使用。

 

startup类:配置应用程序

  startup类主要负责应用的两个方面的配置:

    1、服务注册 - 您的应用程序所依赖的任何类 ,无论是框架使用的类还是应用程序自身需要使用的类都必须注册,只有这样,这些类才能在运行时被正常构建;

    2、中间件和mvc  - 应用程序如何处理和响应请求;

  在不同的方法中配置这两个方面的功能,服务注册在方法configureservices中,中间件和mvc 在方法configure中。这两个方法大致的样子如下所示:

《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

  program中创建的webhostbuilder先调用 configureservices 然后调用configuare,如下图所示:每个调用都会配置应用程序的不同部分。由于这样的调用顺序,configuare方法中可以使用在configureservices方法中注册的任何服务。调用完成后,webhostbuilder通过调用build()方法,创建iwebhost. 有一个地方需要注意,startup类自身没有实现相应的接口,webhostbuilder通过反射来调用预义的方法configure和configureservices,这样的设计使这个类更加灵活,我们可以修改签名,添加额外的参数。更详细的细节将在后面章节介绍。

《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core  解决方案结构解析1

 

谢谢你的阅读,下节见!如果期待本系列,请点一下推荐!