创建项目后,我们可以在“解决方案资源管理器”窗口中看到已添加了许多文件夹和文件,如下图所示:

在解决方案文件夹中,找到项目文件夹,其中包含五个子文件夹,分别是模型,控制器,视图,属性和wwwroot。模型,控制器和视图与MVC模型,控制器和视图相对应。 Properties文件夹包含一个文件(launchSettings.json),该文件控制Visual Studio如何运行和调试应用程序。 wwwroot文件夹非常特殊,因为它是应用程序中浏览器可以直接访问的唯一文件夹。您可以在其中存储应用程序所需的CSS,JavaScript,图像或静态HTML文件。浏览器无法访问wwwroot以外的文件。尽管磁盘上存在wwwroot和Properties文件夹,但是您可以看到解决方案资源管理器将它们显示为特殊节点,而不是按字母顺序排列,并且位于项目的顶部区域。项目中有两个特殊节点,依赖项和已连接服务,它们在磁盘上没有相应的文件夹。它们显示项目所有依赖项的集合,例如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 Framework4.5、Mono等)以及NuGet程序包。项目取决于。项目文件一直是.NET应用程序的核心,而ASP.NET Core已对其进行了调整,以使其更易于阅读和编辑。这些调整如下:

1、没有GUID,以前,全局唯一标识符(GUID)在项目文件中得到了广泛使用;
2、隐式文件包括-以前,必须先在csproj文件中列出项目中的每个文件,然后才能编译项目。现在,文件将自动编译;
3、没有指向NuGet软件包dll的路径-以前,csproj必须在packages.xml文件中包括dll的路径并列出依赖项。现在,您可以直接在csproj中引用NuGet软件包,而无需在磁盘上指定路径;
这些更改使项目文件更加简洁,下图显示了整个csproj文件:


上图中Project元素的Sdk属性设置已编译项目的默认设置,而TargetFramework元素设置应用程序的运行框架。对于.NET Core2.0项目,该值为netcoreapp2.0;对于完整的.NET Framework4.6.1项目,该值为net461。对于简单的应用程序,我们不需要更改项目文件。如果要编辑csproj文件,则不需要像以前的版本一样关闭项目,只需使用上述方法进行编辑即可。对项目文件的最常见更改是添加项目引用(PackageReference元素下的NuGet包)。默认情况下,.NET Core项目仅引用一个NuGet包-Microsoft.AspNetCore.All,它是一个元数据包(元数据包是不包含代码的NuGet包。它引用一个或多个其他NuGet包。通过添加一个将元数据包添加到应用程序中,您可以轻松且隐式地添加其所有包引用),包括ASP.NET Core [与k1有关的所有包] 0,但这并不意味着应用程序将使用所有ASP.NET Core包。在ASP.NET Core2.1中,默认情况下会安装Microsoft.AspNetCore.App元数据包引用。您可以检查Microsoft.AspNetCore.App和所有元数据包之间的区别。
简化的项目文件更易于手动编辑,这有利于跨平台应用程序的开发。如果仍然使用Visual Studio,则仍然可以像以前一样添加项目引用,管理NuGet包等。有关csproj格式更改的更多详细信息,请参阅。
程序类:构建虚拟主机
使用Program.cs文件,以与.NET控制台应用程序相同的方式启动所有ASP.NET Core应用程序。该文件包含静态的Main函数(这是控制台应用程序的标准功能)。应用程序必须包括此方法,该方法在Web应用程序启动时被调用。在ASP.NET Core应用程序中,它用于构建和运行IWebHost实例,如下图所示,该图显示了默认的Program.cs文件。 IWebHost是ASP.NET Core应用程序的核心。它包含应用程序配置和侦听请求的Kestrel服务器,并返回客户端请求响应。
Main函数包含创建Web服务器并开始侦听请求所需的基本初始化代码。在实例化IWebHost之前,请通过CreateDefaultBuilder方法定义IWebHost的配置。应用程序的大多数配置都在CreateDefaultBuilder方法中进行,该方法还将一些职责委派给单独的启动类。此类由通用方法UseStartup引用,您可以在其中配置应用程序的服务和中间件。
这里有很提出了这个问题,为什么将配置分为两类?一般来说,Program类负责应用程序的基本结构,例如:Http服务器,与IIS的集成,配置源;启动定义了应用程序将使用哪些功能,组件和中间件。如下图所示:


两个不同的ASP.NET Core应用程序的Program类通常是相似的,但是Startup类通常是相差很大的(尽管它们通常遵循相似的模式)。随着应用程序的增长,很少修改程序,但是经常修改启动程序。例如,向项目添加新的NuGet依赖项通常需要在Startup中添加相应的代码才能使用它。
启动类:配置应用程序
Startup类主要负责应用程序两个方面的配置:
1、服务注册-您的应用程序所依赖的任何类,无论是框架使用的类还是应用程序本身使用的类,都必须注册。只有这样,这些类才能在运行时正常构造;

2、中间件和MVC-应用程序如何处理和响应请求;
以不同的方法配置这两个功能。服务在ConfigureServices方法中注册,中间件和MVC在Configure方法中。这两种方法大致如下:

在程序中创建的WebHostBuilder首先调用ConfigureServices,然后进行配置,如下图所示:每个调用将配置应用程序的不同部分。由于此调用顺序,因此可以在Configure方法中使用在ConfigureServices方法中注册的任何服务。调用完成后,WebHostBuilder通过调用Build()方法创建IWebHost。需要注意的一件事是Startup类本身并未实现相应的接口。 WebHostBuilder通过反射调用预定义的方法Configure和ConfigureServices。这种设计使此类更加灵活,我们可以修改签名并添加其他参数。更详细的细节将在后面的章节中介绍。

感谢您阅读并在下一节中与您见面!如果您期待这个系列,请单击以推荐!
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-344286-1.html
也看看美国啥反应
亲