From 79fed6cf5d0256d0cb9e615b447f8a772b0b538e Mon Sep 17 00:00:00 2001 From: luoqian <2769838458@qq.com> Date: Fri, 22 May 2026 14:02:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Avalonia=20Stack?= =?UTF-8?q?=20dotnet=20=E6=A8=A1=E6=9D=BF=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + .template.config/template.json | 90 ++++++++++++++++++++++++++++++ Avalonia.Stack.TemplatePack.csproj | 24 ++++++++ README.md | 32 +++++++++++ 4 files changed, 149 insertions(+) create mode 100644 .template.config/template.json create mode 100644 Avalonia.Stack.TemplatePack.csproj diff --git a/.gitignore b/.gitignore index cc2f576..26dd79e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,6 @@ /package-output /package-scripts/tools /.vs +/.template-hive +/bin +/obj diff --git a/.template.config/template.json b/.template.config/template.json new file mode 100644 index 0000000..7338d5c --- /dev/null +++ b/.template.config/template.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Qiang", + "classifications": [ + "Avalonia", + "ASP.NET Core", + "Desktop", + "Template" + ], + "identity": "Qiang.Avalonia.Stack", + "name": "Avalonia Stack", + "shortName": "Qiang-avalonia-stack", + "preferNameDirectory": true, + "forms": { + "appendHyphen": { + "identifier": "replace", + "pattern": "$", + "replacement": "-" + }, + "keepOriginalCase": { + "identifier": "replace", + "pattern": "$", + "replacement": "" + }, + "appendUnderscore": { + "identifier": "replace", + "pattern": "$", + "replacement": "_" + } + }, + "symbols": { + "projectFileName": { + "type": "derived", + "valueSource": "name", + "valueTransform": "keepOriginalCase", + "fileRename": "Avalonia" + }, + "projectPrefix": { + "type": "derived", + "valueSource": "name", + "valueTransform": "appendHyphen", + "replaces": "Avalonia-" + }, + "namespacePrefix": { + "type": "derived", + "valueSource": "name", + "valueTransform": "appendUnderscore", + "replaces": "Avalonia_" + }, + "lowerCaseProjectName": { + "type": "generated", + "generator": "casing", + "parameters": { + "source": "name", + "toLower": true + }, + "fileRename": "avalonia" + }, + "lowerCaseProjectPrefix": { + "type": "derived", + "valueSource": "lowerCaseProjectName", + "valueTransform": "appendHyphen", + "replaces": "avalonia-" + } + }, + "sources": [ + { + "modifiers": [ + { + "exclude": [ + ".git/**", + ".vs/**", + ".template-hive/**", + ".template.config/**", + "**/bin/**", + "**/.vs/**", + "**/logs/**", + "**/node_modules/**", + "**/obj/**", + "**/*.user", + "README.md", + "package-output/**", + "package-scripts/tools/**", + "Avalonia.Stack.TemplatePack.csproj" + ] + } + ] + } + ] +} diff --git a/Avalonia.Stack.TemplatePack.csproj b/Avalonia.Stack.TemplatePack.csproj new file mode 100644 index 0000000..53d7f76 --- /dev/null +++ b/Avalonia.Stack.TemplatePack.csproj @@ -0,0 +1,24 @@ + + + netstandard2.0 + Qiang.Avalonia.Stack.Templates + 1.0.0 + Qiang Avalonia Stack Templates + Qiang + Project templates for the Qiang Avalonia Stack. + dotnet-new;templates;avalonia;aspnetcore + Template + true + false + content + README.md + true + $(NoWarn);NU5110;NU5111;NU5128 + + + + + + + + diff --git a/README.md b/README.md index e69de29..c22fec5 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,32 @@ +# Avalonia Stack + +This repository can be used as a `dotnet new` project template. The template +replaces the `Avalonia` prefix in solution files, project files, folder names, +project references, C# namespaces, packaging scripts, and frontend names when a +new project is created. + +Use a C# namespace friendly project name such as `DemoApp` or `QiChengApp`. +Avoid names with `-`, spaces, or a leading digit because the generated name is +also used inside C# namespaces. + +## Generate from a local clone + +```powershell +dotnet new install . +dotnet new Qiang-avalonia-stack -n DemoApp -o ..\DemoApp +``` + +The generated solution entry point is `DemoApp-Stack.slnx`. Project folders, +project files, and generated C# namespaces keep the project name casing from +`-n`. + +## Build an installable template package + +```powershell +dotnet pack .\Avalonia.Stack.TemplatePack.csproj -c Release +dotnet new install .\bin\Release\QiCheng.Avalonia.Stack.Templates.1.0.0.nupkg +dotnet new Qiang-avalonia-stack -n DemoApp -o .\DemoApp +``` + +Publish the generated `.nupkg` to a private or public NuGet feed when you want +to create named projects without cloning this template repository first.