第 002 集 - 项目结构加第一个应用程序 - ASP.NET Core:从 0 到过度
在这篇文章/视频中,我将开始设置项目,描述所使用的存储库结构,并初始化第一个 ASP.NET Core 应用程序。应该会快速而简单 😉
鉴于此,以下视频提供了概述,但如果您喜欢快速阅读,请跳至书面综合。
整个系列的播放列表在这里。
简介
正如介绍的那样,在这篇文章中,我将对项目进行初始设置,介绍我将在 .NET 存储库中使用的存储库结构(剧透警告:在此过程中将会有非 .NET 存储库😛)并初始化第一个 ASP.NET Core 应用程序,即我们的示例(最终过度设计的)系统的组管理组件。
我在 Mac 上操作,所以有些命令可能只适用于 Bash。如果你使用的是 Windows,请根据实际情况调整。
创建存储库
首先,我去了 GitHub 并在本系列的伞式组织下为该组件创建了一个新的存储库(AspNetCoreFromZeroToOverkill)GroupManagement
,如上一篇文章所示。
正如我对其他存储库所做的那样,我采用了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
[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
(仅考虑文件夹结构,.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
这些是 .NET Core 2.1 SDK 附带的默认项目模板。
Web 项目类型有很多,但我们选择空的,因为我想从头开始构建所有内容,而不是先有大量项目,然后再删除不需要的部分。我认为空的更适合学习,虽然其他模板可能更适合快速入门。
确实dotnet new web
如此。除了创建必要的文件外,所需的依赖项也会立即恢复,无需像以前版本的 .NET Core 那样手动执行。
代码
现在我们可以看到代码了。我只需进入解决方案根目录并输入code .
,它就会在该文件夹中打开 Visual Studio Code —— 执行此操作需要你配置此功能,但我认为它在最新版本的 Visual Studio Code 中是默认配置的。
查看代码,我们可以看到里面没有太多内容,而且由于我们特意使用了空的 Web 应用程序模板,所以应该没有太多内容。最需要查看的文件是CodingMilitia.PlayBall.GroupManagement.Web.csproj
、Program.cs
和Startup.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)
来查看智能感知显示的内容,你会注意到有可用的方法Configure
和ConfigureServices
方法,所以我们不需要使用额外的类,这只是一种更好的组织方式。
回到这个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