ASP.NET Core Web 项目文件

本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 
文章会随着版本进行更新,关注我获取最新版本 
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录 
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core

ASP.NET Core Web 项目文件

在本视频中,我们将探索并了解 asp.net core 项目文件。 我们使用 C#作为编程语言,因此项目文件具有.csproj 扩展名。

如果您使用过以前版本的 ASP.NET,那么您可能对此文件非常熟悉,但此文件中包含的格式和内容在 asp.ne Core 中发生了很大变化。

一个重要的变化是,项目文件不包含任何文件夹或文件引用。

简单解释后的意思就是。在以前的 ASP.NET 中,当我们使用解决方案资源管理器向项目添加文件或文件夹时,项目文件中会包含对该文件或文件夹的引用。但是在 ASP.NET Core 中,项目文件不包含任何文件夹或文件引用。

由文件系统来确定哪些文件和文件夹属于项目。在项目的根目录中存在的所有文件和文件夹都是属于项目的一部分,将显示在解决方案资源管理器中。 当您在添加文件或文件夹时,该文件或文件夹将会变成项目的一部分,会立即显示在解决方案资源管理器中。 同样,当您在解决方案下的任何文件夹中删除文件或文件夹时,该已删除的文件或文件夹不再是项目的一部分,会立即从解决方案资源管理器中不再显示出来。

另外我们与项目文件的工作方式也发生了变化。在以前版本的 asp.net 中,为了能够编辑项目文件,我们首先要卸载项目,编辑并保存项目文件,然后重新加载项目。而在 asp.net core 中,我们可以编辑项目文件而无需卸载项目。

在解决方案中,右键单击项目名称并选择“编辑 StudentManagement.csproj” 文件。

这将在编辑器中打开.csproj 文件。

<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>
</Project>
C#

TargetFramework:顾名思义,此元素是用于指定应用程序的目标框架,即您希望为应用程序提供的 APId 程序集。为了指定目标框架,我们使用了一个名为 Target Framework Moniker(TFM)的东西。正如您在上面的示例中所看到的,我们的应用程序针对 TargetFramework 的值为 netcoreapp2.2。netcoreapp2.2 是.NET Core 2.2 的 Moniker。当我们创建此应用程序时,我们从新建项目中下拉列表中选择了**.NET Core 2.2**作为目标框架。

AspNetCoreHostingModel:此元素指定应如何托管 Asp.Net Core 应用程序。它表示程序应该托管 InProcess(进程内)还是 OutOfProcess(进程外)。 InProcess 的值指定我们想要使用进程内托管模型,即在 IIS 工作进程(w3wp.exe)中托管我们的 asp.net core 应用程序。 OutOfProcess 的值指定我们要使用进程外托管模型,将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用程序。

我们将在即将发布的视频中详细讨论 InProcess(进程内)和 OutOfProcess(进程外)托管。

PackageReference:顾名思义,此元素用于包含对为您的应用程序安装的所有 NuGet 包的引用。在项目文件中,我们有以下 2 个 NuGet 包。

Microsoft.AspNetCore.App
Microsoft.AspNetCore.Razor.Design

Microsoft.AspNetCore.App:此 NuGet 包称为metapackage。 metapackage 本身是没有任何的内容的,它只是包含了其他包的依赖信息。 您可以在解决方案资源管理器中的 NuGet 下找到此元数据包,而 NuGet 又位于**依赖项(Dependencies)**下。展开元数据包时,您可以找到所有依赖项。

Microsoft.AspNetCore.App里面包含了ASP.NET Core 2.2及更高版本和Entity Framework Core 2.2及更高版本的所有组件。

在 ASP.NET Core 2.1 及更高版本的默认项目模板,都是会使用这个包。

请注意,metapackage 中没有版本号。 未指定版本时,SDK 会指定隐式版本。 .NET Core 团队建议依赖 SDK 指定的隐式版本,而不是在包引用上显式设置版本号。 如果目前还不完全清楚,请不要担心。

我们将在即将发布的视频中详细讨论metapackage和隐式版本。

Microsoft.AspNetCore.Razor.Design:此软件包包含对 Razor 的 MSBuild 支持,并由 Microsoft.AspNetCore.App 的 metapackage 包引用。

摘要

在本文中,我尝试解释了在 ASP.NET Core 中的项目文件的生成,以及里面常用的标签元素。 我希望这篇文章可以帮助您满足您的需求。 我想收到你的反馈意见。 请发布您对本文的反馈,问题或意见。

[04]ASP.NET Core Web 项目文件的更多相关文章

  1. ASP.NET Core Web 项目文件

    在本节中,我们将探索并了解 asp.net core 项目文件. 我们使用 C#作为编程语言,因此项目文件具有.csproj 扩展名. 如果您使用过以前版本的 ASP.NET,那么您可能对此文件非常熟 ...

  2. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  3. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  4. ASP.NET Core Web API 跨域(CORS) Cookie问题

    身为一个Web API,处理来自跨域不同源的请求,是一件十分合理的事情. 先上已有的文章,快速复制粘贴,启用CORS: Microsoft:启用 ASP.NET Core 中的跨域请求 (CORS) ...

  5. 从ASP.Net Core Web Api模板中移除MVC Razor依赖项

    前言 :本篇文章,我将会介绍如何在不包括MVC / Razor功能和包的情况下,添加最少的依赖项到ASP.NET Core Web API项目中. 一.MVC   VS WebApi (1)在ASP. ...

  6. [03-2]VS2017 创建 ASP.NET Core Web 程序

    VS2017 创建 ASP.NET Core Web 程序 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开始学 ...

  7. [03]使用 VS2019 创建 ASP.NET Core Web 程序

    使用 VS2019 创建 ASP.NET Core Web 程序 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开 ...

  8. asp.net core web api 生成 swagger 文档

    asp.net core web api 生成 swagger 文档 Intro 在前后端分离的开发模式下,文档就显得比较重要,哪个接口要传哪些参数,如果一两个接口还好,口头上直接沟通好就可以了,如果 ...

  9. ASP.NET Core Web应用在发布时选择是否对视图进行编译

    原文:ASP.NET Core Web应用在发布时选择是否对视图进行编译 在我们发布ASP.NET Core Web应用程序时,选择以文件形式发布,发布方法选择文件系统 默认情况下,会把Views的视 ...

随机推荐

  1. Java+TestNG+Maven+Excel+IDEA接口自动化入门(一)环境配置

    前置: 1.本机环境安装了maven并配置环境变量 2.本机环境安装了IDEA软件 3.本机环境安装了Java jdk 8版本 4.有一定java和maven基础 因为以上网上例子很多,就不再重复赘述 ...

  2. 原子类解决i++问题

    原子类解决i++问题 import java.util.concurrent.atomic.AtomicInteger; /** * 一个完整的i++,多线程并发安全问题演示.及使用java.util ...

  3. 剑指Offer-37.二叉树的深度(C++/Java)

    题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 递归求解左右子树的最大值即可,每遍历到一个结点,深度加1,最后 ...

  4. Redis令牌桶限流

    一 .场景描述 在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源, 通常来说我们会对于服务器上的各种接口进行调用次数的限制.比如对于某个 用户,他在一个时间段(interval ...

  5. IT兄弟连 HTML5教程 CSS3揭秘 CSS3属性2

    3  背景属性 在CSS3中提供了多个背景属性,这里只介绍两个比较常用的属性,其他属性可以从手册中获取帮助.在CSS3中,通过background-image或者background属性可以为一个容器 ...

  6. 在windows桌面上创建一个文件夹

    用dos命令创建 md [文件路径][文件名] C:\Users\admin>md  C:\Users\admin\desktop\test 刷新一下桌面,就可以看见桌面上创建了一个名为test ...

  7. Python time.time()方法

    描述 Python time time()返回当前时间的时间戳. 时间戳:时间戳是指格林威治时间1970年01月01日00时00分00秒(背景时间1970年01月01日08时00分00秒)起至现在的总 ...

  8. Java题库——chapter7 多维数组

    1)Which of the following statements are correct? 1) _______ A)char[ ][ ] charArray = {{'a', 'b'}, {' ...

  9. maven私服的配置使用

    maven的仓库分为本地仓库,远程仓库和私服仓库. 私服仓库一般是公司内部私有的,内部进行维护的.公司员工连接私服,从私服中下载jar,或者将自身的jar传到私服上.私服还可以从中央仓库下载jar,当 ...

  10. (转)格拉布斯准则(Grubbs Criterion)处理数据异常

    格拉布斯准则:https://baike.baidu.com/item/%E6%A0%BC%E6%8B%89%E5%B8%83%E6%96%AF%E5%87%86%E5%88%99/3909586 G ...