开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板
前言
上一篇文章(開發(fā)一個現(xiàn)代化的.NetCore控制臺程序,包含依賴注入/配置/日志等要素)介紹了開發(fā)現(xiàn)代化的.NetCore控制臺程序的細(xì)節(jié),但這還不夠,我又創(chuàng)建了一個腳手架模板,并命名為 FluentConsole.Templates ,可以方便的創(chuàng)建「現(xiàn)代化控制臺應(yīng)用」。
源碼地址: https://github.com/Deali-Axy/fluent-dotnet-console
Nuget包地址: https://www.nuget.org/packages/FluentConsole.Templates/
模板功能
- ?? 提供快速開發(fā)模板,一鍵生成控制臺應(yīng)用的項目骨架
- ?? 提供一個「現(xiàn)代化控制臺應(yīng)用項目結(jié)構(gòu)的最佳實踐」的參考方案
- ?? 依賴注入 - 基于
Microsoft.Extensions.DependencyInjection的依賴注入支持 - ?? 日志 - 基于
Microsoft.Extensions.Logging日志框架,搭配Serilog實現(xiàn)日志文件輸出 - ?? 配置 - 基于
Microsoft.Extensions.Configuration配置框架,搭配dotenv.net等組件擴(kuò)展功能
快速開始
安裝模板
dotnet new install FluentConsole.Templates
使用模板創(chuàng)建項目
dotnet new flu-cli -n MyProject
項目目錄結(jié)構(gòu)
使用模板創(chuàng)建的項目目錄結(jié)構(gòu)是這樣,代碼統(tǒng)一放在 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- 業(yè)務(wù)邏輯代碼 -
MISC- 雜項 -
Entities- 實體類,強(qiáng)類型配置、輸出結(jié)果對象
因此,創(chuàng)建項目之后,直接在 Services/MainService.cs 文件里寫業(yè)務(wù)邏輯就好了。
如何創(chuàng)建項目模板?
跟著微軟官方的教程來,非常容易,主要是一些目錄結(jié)構(gòu)方面的細(xì)節(jié)需要處理一下。
以本項目的源碼為例,我們需要一個創(chuàng)建模板的工作目錄,這個目錄在本項目中是 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 目錄下面每個目錄都是一個模板,當(dāng)然本項目只創(chuàng)建了一個模板,也許以后會添加更多的模板。
每個模板下面最重要的就是 .template.config ,有了這個目錄,dotnet 才會識別到這是個模板
當(dāng)然還得寫個模板配置 template.json
{
"$schema": "http://json.schemastore.org/template",
"author": "DealiAxy",
"classifications": [
"Common",
"Console"
],
"identity": "FluentConsole.Template",
"name": "FluentConsole.Template",
"description": "提供「現(xiàn)代化的控制臺應(yīng)用的開發(fā)體驗」腳手架,能像 Web 應(yīng)用那樣很優(yōu)雅地整合各種組件,包括依賴注入、配置、日志等功能。",
"shortName": "flu-cli",
"sourceName": "FluentConsole.Template",
"tags": {
"language": "C#",
"type": "project"
}
}
注意其中的 sourceName 字段,這是模板創(chuàng)建時會被替換的內(nèi)容。
比如我們使用了以下命令,從模板創(chuàng)建一個項目,通過 -n 指定了項目名稱為 MyProject
dotnet new flu-cli -n MyProject
那么 dotnet 會自動把 sourceName 設(shè)置的這個名字替換為用戶指定的項目名稱 MyProject
OK,暫時就是這些了,創(chuàng)建模板就這么簡單。
安裝模板
可以直接從源碼安裝模板
依然是這個項目代碼,切換到模板代碼所在的目錄下面,即可安裝模板
cd src/Templates/content/FluentConsole.Template
dotnet new install ./
安裝后可以看到安裝成功的提示
成功: FluentConsole.Templates::1.1.0 已安裝以下模板:
---------------------- ------- ---- --------------
FluentConsole.Template flu-cli [C#] Common/Console
創(chuàng)建 nuget 包
在 src/Templates 下創(chuàng)建 FluentConsole.Templates.csproj 文件
關(guān)鍵代碼如下
<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>提供「現(xiàn)代化的控制臺應(yīng)用的開發(fā)體驗」腳手架,能像 Web 應(yīng)用那樣很優(yōu)雅地整合各種組件,包括依賴注入、配置、日志等功能。</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>
然后執(zhí)行 dotnet pack 即可創(chuàng)建 nuget 包
然后可以上傳到 nuget 平臺。
使用 GitHub 發(fā)布 nuget 包
GitHub 提供了 Packages 管理的功能,可以直接從 GitHub 項目直接創(chuàng)建 nuget 包,并發(fā)布到 nuget 平臺。
PS:我研究一下,下一篇文章再繼續(xù)介紹。
參考資料
- 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/
總結(jié)
以上是生活随笔為你收集整理的开发现代化的.NetCore控制台程序:(2)创建一个C#项目模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 唐太子李承乾,皇位的唯一“合法”继承人,
- 下一篇: 格路径计数