开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板
前言
上一篇文章(開發一個現代化的.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:我研究一下,下一篇文章再繼續介紹。
參考資料
- https://learn.microsoft.com/en-us/dotnet/core/tutorials/cli-templates-create-template-package
- 源碼地址: https://github.com/Deali-Axy/fluent-dotnet-console
- Nuget包地址: https://www.nuget.org/packages/FluentConsole.Templates/
總結
以上是生活随笔為你收集整理的开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唐太子李承乾,皇位的唯一“合法”继承人,
- 下一篇: 格路径计数