前言
上一篇文章(開發一個現代化的.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:我研究一下,下一篇文章再繼續介紹。