前言
上一篇文章(开发一个现代化的.NetCore控制台程序,包含依赖注入/配置/日志等要素)介绍了开发现代化的.NetCore控制台程序的细节,但这还不够,我又创建了一个脚手架模板,并命名为 FluentConsole.Templates ,可以方便的创建「现代化控制台应用」。
源码地址: https://github.com/Deali-Axy/fluent-dotnet-console
Nuget包地址: https://www.nuget.org/packages/FluentConsole.Templates/
模板功能
- 🚀 提供快速开发模板,一键生成控制台应用的项目骨架
- 🐴 提供一个「现代化控制台应用项目结构的最佳实践」的参考方案
- 💉 依赖注入 - 基于
Microsoft.Extensions.DependencyInjection的依赖注入支持 - 📄 日志 - 基于
Microsoft.Extensions.Logging日志框架,搭配Serilog实现日志文件输出 - 🔧 配置 - 基于
Microsoft.Extensions.Configuration配置框架,搭配dotenv.net等组件扩展功能
快速开始
安装模板
dotnet new install FluentConsole.Templates
使用模板创建项目
dotnet new flu-cli -n MyProject
项目目录结构
使用模板创建的项目目录结构是这样,代码统一放在 src 目录下。
MyProject ├─ src │ ├─ Utilities │ │ └─ ConsoleTool.cs │ ├─ Services │ │ ├─ MainService.cs │ │ └─ IService.cs │ ├─ MISC │ │ └─ SourceGenerationContext.cs │ ├─ Entities │ │ ├─ OutputResult.cs │ │ └─ AppSettings.cs │ └─ Program.cs ├─ MyProject.csproj ├─ Dockerfile └─ appsettings.json
这是 src 里每个目录的介绍:
Utilities- 存放通用工具类Services- 业务逻辑代码MISC- 杂项Entities- 实体类,强类型配置、输出结果对象
因此,创建项目之后,直接在 Services/MainService.cs 文件里写业务逻辑就好了。
如何创建项目模板?
跟着微软官方的教程来,非常容易,主要是一些目录结构方面的细节需要处理一下。
以本项目的源码为例,我们需要一个创建模板的工作目录,这个目录在本项目中是 src/Templates
Templates ├─ content │ └─ FluentConsole.Template │ ├─ FluentConsole.Template │ │ ├─ src │ │ ├─ FluentConsole.Template.csproj │ │ ├─ Dockerfile │ │ ├─ appsettings.json │ │ └─ .env │ └─ .template.config │ └─ template.json └─ FluentConsole.Templates.csproj
然后把所有模板放在 content 目录中,可以理解为 content 目录下面每个目录都是一个模板,当然本项目只创建了一个模板,也许以后会添加更多的模板。
每个模板下面最重要的就是 .template.config ,有了这个目录,dotnet 才会识别到这是个模板
当然还得写个模板配置 template.json
{ "$schema": "http://json.schemastore.org/template", "author": "DealiAxy", "classifications": [ "Common", "Console" ], "identity": "FluentConsole.Template", "name": "FluentConsole.Template", "description": "提供「现代化的控制台应用的开发体验」脚手架,能像 Web 应用那样很优雅地整合各种组件,包括依赖注入、配置、日志等功能。", "shortName": "flu-cli", "sourceName": "FluentConsole.Template", "tags": { "language": "C#", "type": "project" } }
注意其中的 sourceName 字段,这是模板创建时会被替换的内容。
比如我们使用了以下命令,从模板创建一个项目,通过 -n 指定了项目名称为 MyProject
dotnet new flu-cli -n MyProject
那么 dotnet 会自动把 sourceName 设置的这个名字替换为用户指定的项目名称 MyProject
OK,暂时就是这些了,创建模板就这么简单。
安装模板
可以直接从源码安装模板
依然是这个项目代码,切换到模板代码所在的目录下面,即可安装模板
cd src/Templates/content/FluentConsole.Template dotnet new install ./
安装后可以看到安装成功的提示
成功: FluentConsole.Templates::1.1.0 已安装以下模板: ---------------------- ------- ---- -------------- FluentConsole.Template flu-cli [C#] Common/Console
创建 nuget 包
在 src/Templates 下创建 FluentConsole.Templates.csproj 文件
关键代码如下
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <PackageId>FluentConsole.Templates</PackageId> <PackageVersion>1.1</PackageVersion> <Title>FluentDotnetConsole Templates</Title> <Authors>DealiAxy</Authors> <Company>CodeLab</Company> <Description>提供「现代化的控制台应用的开发体验」脚手架,能像 Web 应用那样很优雅地整合各种组件,包括依赖注入、配置、日志等功能。</Description> <PackageTags>dotnet-new;templates;console;cli</PackageTags> <PackageProjectUrl>https://github.com/Deali-Axy/fluent-dotnet-console</PackageProjectUrl> <PackageType>Template</PackageType> <TargetFramework>netstandard2.0</TargetFramework> <IncludeContentInPack>true</IncludeContentInPack> <IncludeBuildOutput>false</IncludeBuildOutput> <ContentTargetFolders>content</ContentTargetFolders> <NoWarn>$(NoWarn);NU5128</NoWarn> <NoDefaultExcludes>true</NoDefaultExcludes> <PackageReadmeFile>README.md</PackageReadmeFile> </PropertyGroup> <ItemGroup> <Content Include="content***" Exclude="content**bin**;content**obj**"/> <Compile Remove="***"/> </ItemGroup> </Project>
然后执行 dotnet pack 即可创建 nuget 包
然后可以上传到 nuget 平台。
使用 GitHub 发布 nuget 包
GitHub 提供了 Packages 管理的功能,可以直接从 GitHub 项目直接创建 nuget 包,并发布到 nuget 平台。
PS:我研究一下,下一篇文章再继续介绍。