我们下面通过在Visual Studio 2017中创建一个空的Web应用程序来详细说明下asp.net core项目目录结构:

1、项目结构说明

(1)、依赖项

这里主要分两部分SDK, 目前这两部分下面都只有一项。

Nuget

包含Microsoft.AspNetCore.App, 展开它看一下MVC、EF等等都有,它包含了:

· ASP.NET Core 团队支持的所有包。

· Entity Framework Core 支持的所有包。

· Entity Framework Core 使用的内部和第三方依赖关系。

猛地一看,这是一非常大而全的包了asp.net core模块化有点不一致, 非常不爽。

其实这些程序集不会随着项目发布一起出现在部署包中, 所以发布包不会变大反而会变小, 不必担心。

SDK:

SDK中包含了一项: Microsoft.NETCore.App, 它是.NET Core 的部分库。 也就是 .NETCoreApp 框架。 它依赖于更小的 NETStandard.Library。

SDK同样是一个大而全的集和, 在部署的时候, SDK中的引用依然不会出现在部署包中, 如下图, 是不是很精简。

(2)、launchSettings.json

顾名思义, 这是一个启动配置文件, json格式的。

通过上面的项目结构图可以发现, 常见的web.config或app.config等xml格式的config文件找不到了,取而代之和的都是json。

打开这个json看一下。 一项项的不好解释, 不过我们可以通过windows 中的 vs2017中的图形化的配置界面(右键当前项目->属性->调试),如下图所示:

(3)、wwwroot文件夹

看这名字好像是IIS的默认网站根目录, 它包含了所有的"前端"的静态文件, css、images、js、一个名为lib的文件夹和favicon.ico图标文件。

lib中默认内容是bootstrap和jquery相关内容。

在Startup中, 会调用一个无参数的UseStaticFiles()方法, 将此目录标记到网站根目录。

Startup.cs 的区别在于Startup.cs ,这个可以通过 Program.cs 中的代码看出来:

WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();

曾经使用过 ASP.NET,我们大家都知道以下两点:

1、Global.asax 文件,可以在启动 Web 应用程序期间编写代码来执行的一个地方。

2、 Web.config 文件,用来包含应用程序需要执行的所有配置参数。

但是在 ASP.NET Core 中,这些文件全部消失,取而代之的是使用 Startup.cs 加载配置和启动代码。

Startup.cs文件中有一个 Startup 类,在这个类中可以配置应用程序,甚至配置配置源。

2、项目启动介绍

应用程序入口类

这是一个大家非常熟悉的Main方法, 也就是应用的起点, 启动后通过UseStartup<Startup>()指定下文的Startup启动文件进行启动。

在应用启动的时候,会执行CreateWebHostBuilder方法,在这个方法中通过类Startup创建了默认的HostBuilder。

3、应用启动类

这是.NET Core非常重要的地方, 包括加载配置, 通过依赖注入加载组件, 注册路由等都在此处进行。

Startup 类必须是公开的,且必须包含以下两个方法

1、ConfigureServices()方法

public void ConfigureServices(IServiceCollection services){ }

ConfigureServices() 方法用于定义应用程序所需要的服务,例如 ASP.NET Core MVC 、 Entity Framework Core 和 Identity 等等。

2、Configure() 方法

public void Configure(IApplicationBuilder app, IHostingEnvironment env){ }

Configure() 用于定义请求管道中的中间件。

Web项目模板默认在项目启动的时候调用IApplicationBuilder.run方法,在当前HTTP上下文(HttpContext)中输出了Hello World!

Startup 类中的 Configure() 方法用于配置和构建 HTTP 请求管道的地方。该怎么理解这句话呢?

其实也就是说,Configure() 方法可以用来定义我们的应用程序如何响应请求。对于任意网址,默认情况下它只会输出 Hello World!

例如,如果我们想要为诸如 index.html 之类的静态文件提供服务,则需要向 Configure() 方法添加一些代码。

例如,如果想要给 ASP.NET MVC 控制器发送错误页面或路由请求,都需要在这个 Configure() 方法中做一些工作。

比如我们还可以用app.UseAuthentication()来做身份验证。

我们使用 Use、Run 和 Map 来配置 HTTP 管道。

Use 方法可使管道短路(即不调用 next 请求委托)。

Run 是一种约定,并且某些中间件组件可公开在管道末尾运行的 Run[Middleware] 方法。

Map* 扩展用作约定来创建管道分支。

ASP.NET Core项目目录结构介绍的更多相关文章

  1. Scrapy框架——介绍、安装、命令行创建,启动、项目目录结构介绍、Spiders文件夹详解(包括去重规则)、Selectors解析页面、Items、pipelines(自定义pipeline)、下载中间件(Downloader Middleware)、爬虫中间件、信号

    一 介绍 Scrapy一个开源和协作的框架,其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的,使用它可以以快速.简单.可扩展的方式从网站中提取所需的数据.但目前Scrapy的用途十分广泛,可 ...

  2. 二、VUE项目BaseCms系列文章:项目目录结构介绍

    一. 目录结构截图 二. 目录结构说明 - documents    存放项目相关的文档文件 - api   api 数据接口目录 - assets    资源文件目录 - components   ...

  3. Android Studio项目目录结构介绍——android菜鸟成长之路

    在Android Studio中,提供了以下几种项目结构类型 我们一般常用的有以下两种结构: Project 结构类型 app/build/ app模块build编译输出的目录 app/build.g ...

  4. Android Studio项目目录结构介绍

    在Android Studio中,提供了以下几种项目结构类型 我们一般常用的有以下两种结构: Project 结构类型 app/build/ app模块build编译输出的目录 app/build.g ...

  5. 依赖反转原则DIP 与 asp.net core 项目结构

    DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...

  6. 依赖反转原则DIP 与使用了Repository模式的asp.net core项目结构

    DIP 依赖反转原则 Dependency Inversion Principle 的定义如下: 高级别的模块不应该依赖于低级别的模块, 他们都应该依赖于抽象. 假设Controller依赖于Repo ...

  7. 【Android Studio安装部署系列】三、Android Studio项目目录结构

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 简单介绍下Android studio新建项目的目录结构. 常用项目结构类型 在Android Studio中,提供了以下几种项目结 ...

  8. ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基本项目目录结构 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 基本项目目录结构 上一章节中我们成功创建了一个名为 Hell ...

  9. .net core 第一个mvc项目目录结构简析

    创建项目的命令     首先来认识一下创建项目可使用的各种命令,.NETCore 的命令都以 dotnet 打头,这很好理解,输入 dotnet xxx,就是执行环境变量指向的 C:\Program ...

随机推荐

  1. Windows-计划任务-自动备份数据库和文件

    开始 -> 程序 -> 附件 -> 系统工具 -> 计划任务 .bat 文件如下: ::数据库+文件备份 @echo off ::日期时间 set yyyymmdd=%date ...

  2. jmeter 导入csv数据中json格式数据取值不完整

    1.jmeter中添加csv数据文件时,数据是json格式 2.jmeter中执行取值发现只取了一部分 分析原因,json格式数据,中间有逗号,而csv是根据逗号来分割的,这回导致我们取值错位. 解决 ...

  3. Selenium:WebDriverApi接口详解

    浏览器操作 # 刷新 driver.refresh() # 前进 driver.forward() # 后退 driver.back() Cookie操作 # 根据cookieKey,获取cookie ...

  4. maven(一),maven3.5.3的windows安装及Eclipse集成

    maven用了好长时间,需要系统的学习一下.maven ,是一个项目构建的工具,是一个项目管理和综合工具,具有项目生命周期管理功能. maven现在到了3.5.3,就以这个版本进行. 一.下载mave ...

  5. JS原型与原型链终极详解 (转载)

    这篇文章需要认认真真仔仔细细的看才能看懂 一. 普通对象与函数对象  JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object ,Function 是JS自带的函 ...

  6. apache 安装配置 (centos)

    1. 使用yum包安装Apache软件 [root@Apache ~]# yum -y install httpd* [root@Apache ~]# rpm -qa | grep httpd --查 ...

  7. tp5 之 "No input file specified

    tp5 之 "No input file specified" 问题 通过"域名/模块/控制器/方法"这样的方式访问的时候,浏览器输出如下: 直接通过" ...

  8. Java_3.Java帮助文档

    1.Oracle的在线帮助文档 http://docs.oracle.com/javase/8/docs/api 2.jdk源码内容(包含5个部分) [以下内容参考至:https://blog.csd ...

  9. 2019牛客多校第五场F maximum clique 1 最大独立集

    题意:给你n个数,现在让你选择一个数目最大的集合,使得集合中任意两个数的二进制表示至少有两位不同,问这个集合最大是多大?并且输出具体方案.保证n个数互不相同. 思路:容易发现,如果两个数不能同时在集合 ...

  10. mocha.js

    mocha 如果你听说过“测试驱动开发”(TDD:Test-Driven Development),单元测试就不陌生. 单元测试是用来对一个模块.一个函数或者一个类来进行正确性检验的测试工作. 比如对 ...