第 002 集 - 项目结构加第一个应用程序 - ASP.NET Core:从 0 到过度

2025-06-07

第 002 集 - 项目结构加第一个应用程序 - ASP.NET Core:从 0 到过度

在这篇文章/视频中,我将开始设置项目,描述所使用的存储库结构,并初始化第一个 ASP.NET Core 应用程序。应该会快速而简单 😉

鉴于此,以下视频提供了概述,但如果您喜欢快速阅读,请跳至书面综合。

整个系列的播放列表在这里

简介

正如介绍的那样,在这篇文章中,我将对项目进行初始设置,介绍我将在 .NET 存储库中使用的存储库结构(剧透警告:在此过程中将会有非 .NET 存储库😛)并初始化第一个 ASP.NET Core 应用程序,即我们的示例(最终过度设计的)系统的组管理组件。

我在 Mac 上操作,所以有些命令可能只适用于 Bash。如果你使用的是 Windows,请根据实际情况调整。

创建存储库

首先,我去了 GitHub 并在本系列的伞式组织下为该组件创建了一个新的存储库(AspNetCoreFromZeroToOverkillGroupManagement,如上一篇文章所示。

正如我对其他存储库所做的那样,我采用了MIT 许可证,因为它很好而且很宽松,我只是为了方便而已 🙂

除了许可证之外,我还选择了自述文件(仍然是空的,最终会填写),但没有选择预定义.gitignore文件,因为我有另一个版本,该版本源自 GitHub 提供的版本,并添加了一些额外内容。

在此之后,我只需要将 repo 克隆到我的计算机上git clone https://github.com/AspNetCoreFromZeroToOverkill/GroupManagement.git

存储库结构

对于存储库结构,我倾向于遵循类似于 David Fowler(ASP.NET Core 的 Microsoft 架构师)在他的要点中所建议的内容:

$/
  artifacts/
  build/
  docs/
  lib/
  packages/
  samples/
  src/
  tests/
  .editorconfig
  .gitignore
  .gitattributes
  build.cmd
  build.sh
  LICENSE
  NuGet.Config
  README.md
  {solution}.sln
  • src - Main projects (the product code)
  • tests - Test projects
  • docs - Documentation stuff, markdown files, help files etc.
  • samples (optional) - Sample projects
  • lib - Things that can NEVER exist in a nuget package
  • artifacts - Build outputs go here. Doing a build.cmd/build.sh generates artifacts here (nupkgs, dlls, pdbs, etc.)
  • packages - NuGet packages
  • build - Build customizations (custom msbuild files/psake/fake/albacore/etc) scripts
  • build.cmd - Bootstrap the build for windows
  • build.sh - Bootstrap the build for *nix
  • global.json - ASP.NET vNext only

.gitignore

[Oo]bj/
[Bb]in/
.nuget/
_ReSharper.*
packages/
artifacts/
*.user
*.suo
*.userprefs
*DS_Store
*.sln.ide

There's probably more things that go in the ignore file.

  • Update: Added docs folder
  • Added README.md and LICENSE - Critical if you're OSS, if not ignore it
  • Renamed test to tests
  • Added lib for things that CANNOT exist in nuget packages
  • Removed NuGet.config for people using packet :)
  • Added global.json for ASP.NET vnext
  • Added .editorconfig file in the root (x-plat IDE settings)
  • Added NuGet.config back because people were confused about it missing
view raw dotnetlayout.md hosted with ❤ by GitHub

(仅考虑文件夹结构,.gitignore我使用的文件夹结构还有很多东西)

正如他在要点中所解释的那样,真的没有什么可以补充的,但如果有什么不太清楚的话,请随时询问。

初始化应用程序

现在我们知道了如何构建存储库,让我们开始实现它。

首先,我.gitigore从 GitHub 上的一个先前项目中下载了:curl https://raw.githubusercontent.com/CodingMilitia/GrpcExtensions/master/.gitignore -o .gitignore

然后创建一个 .NET 解决方案。在这篇非常简单的文章中,我通过命令行完成了所有操作,然后在 Visual Studio Code 中查看了代码。因此,创建解决方案的步骤如下(在克隆的存储库中)dotnet new sln -n CodingMilitia.PlayBall.GroupManagement

然后,按照所描述的结构,mkdir src创建项目源代码的文件夹,并在该目录中mkdir CodingMilitia.PlayBall.GroupManagement.Web创建第一个应用程序的目录,以完整的命名空间加命名Web,因为它将是 Web 应用程序。

进入应用程序文件夹,我们可以查看dotnet new --help可用的项目类型:

Templates Short Name Language Tags
----------------------------------------------------------------------------------------------------------------------------
Console Application console [C#], F#, VB Common/Console
Class library classlib [C#], F#, VB Common/Library
Unit Test Project mstest [C#], F#, VB Test/MSTest
NUnit 3 Test Project nunit [C#], F#, VB Test/NUnit
NUnit 3 Test Item nunit-test [C#], F#, VB Test/NUnit
xUnit Test Project xunit [C#], F#, VB Test/xUnit
Razor Page page [C#] Web/ASP.NET
MVC ViewImports viewimports [C#] Web/ASP.NET
MVC ViewStart viewstart [C#] Web/ASP.NET
ASP.NET Core Empty web [C#], F# Web/Empty
ASP.NET Core Web App (Model-View-Controller) mvc [C#], F# Web/MVC
ASP.NET Core Web App razor [C#] Web/MVC/Razor Pages
ASP.NET Core with Angular angular [C#] Web/MVC/SPA
ASP.NET Core with React.js react [C#] Web/MVC/SPA
ASP.NET Core with React.js and Redux reactredux [C#] Web/MVC/SPA
Razor Class Library razorclasslib [C#] Web/Razor/Library/Razor Class Library
ASP.NET Core Web API webapi [C#], F# Web/WebAPI
global.json file globaljson Config
NuGet Config nugetconfig Config
Web Config webconfig Config
Solution File sln Solution

Enter fullscreen mode Exit fullscreen mode

这些是 .NET Core 2.1 SDK 附带的默认项目模板。

Web 项目类型有很多,但我们选择空的,因为我想从头开始构建所有内容,而不是先有大量项目,然后再删除不需要的部分。我认为空的更适合学习,虽然其他模板可能更适合快速入门。

确实dotnet new web如此。除了创建必要的文件外,所需的依赖项也会立即恢复,无需像以前版本的 .NET Core 那样手动执行。

代码

现在我们可以看到代码了。我只需进入解决方案根目录并输入code .,它就会在该文件夹中打开 Visual Studio Code —— 执行此操作需要你配置此功能,但我认为它在最新版本的 Visual Studio Code 中是默认配置的。

查看代码,我们可以看到里面没有太多内容,而且由于我们特意使用了空的 Web 应用程序模板,所以应该没有太多内容。最需要查看的文件是CodingMilitia.PlayBall.GroupManagement.Web.csprojProgram.csStartup.cs

CodingMilitia.PlayBall.GroupManagement.Web.csproj文件包含该项目的信息。它表明:

  • 使用的 SDK - 如果你注意到,它与控制台应用程序不同,它具有一些特定的 MSBuild 任务和针对 Web 应用程序的目标
  • 目标框架 - 在这种情况下netcoreapp2.1
  • 应复制到输出的文件夹 -wwwroot在这种情况下
  • 包引用 - 我们可以在解决方案之外的包中添加依赖项 - 目前只有具有创建 ASP.NET Core 应用程序所需 API 的元包(我将在未来详细讨论这个元包)

这个文件还有很多功能可以实现,但初始化之后就完成了。更多关于这个csproj文件的信息,请点击此处

Program.cs文件包含应用程序引导的代码。我们首先要理解的是,ASP.NET Core 应用程序就像一个控制台应用程序,以一个Main方法作为入口点。然后,它只需调用CreateWebHostBuilder来初始化 Kestrel(ASP.NET Core 的嵌入式服务器)并开始监听请求。

在查看该类时Program,我们会看到对该类的引用Startup。我们将在这里配置依赖注入容器和请求处理管道(关于这两者的更多信息将在下一篇文章中介绍)。关于使用这个Startup类,还有一点需要注意,那就是它基本上是一个约定俗成的惯例。如果你在后面加一个点WebHost.CreateDefaultBuilder(args)来查看智能感知显示的内容,你会注意到有可用的方法ConfigureConfigureServices方法,所以我们不需要使用额外的类,这只是一种更好的组织方式。

回到这个Startup类,我们可以看到在 configure 方法中,除了其他内容之外,还有一个app.Run(...)方法调用。这定义了一个中间件——更多细节将在后续文章中介绍。总而言之,它允许我们构建一个请求处理管道,该管道可以由多个中间件组成,每个中间件将请求传递给下一个中间件,直到其中一个中间件提供响应——它将对每个请求进行响应Hello World! string

快速浏览之后,我们来看看它是如何工作的。在项目文件夹(而不是解决方案根目录)中,我们可以执行dotnet run以下命令,应用程序启动并监听端口 5000(如果是 HTTPS 协议则监听端口 5001)。打开浏览器,我们会看到一个空白页面,上面显示…… Hello World!

结尾

现在我们已经准备好了存储库结构和初始项目(实际上没有太多其他内容),我们可以继续编码。在下一篇文章中,我们将从一个简单的 ASP.NET Core MVC 应用程序开始。

别吝惜反馈!期待您下次再来!

谢谢阅读,cyaz!

文章来源:https://dev.to/joaofbantunes/episode-002---project-struct-plus-first-application---aspnet-core-from-0-to-overkill-5dlc
PREV
🤓 🚀 这 6 个 repos 将帮助你征服 React 服务器组件 (RSC) ✅🔥
NEXT
2020 年教会我的 10 件事