如何将无csproj的文件夹结构转为支持VS与CLI的VSIX/VS模板?
全栈项目模板制作方案(支持CLI与Visual Studio 2022)
核心需求
将包含以下结构的目录转为通用模板:
App ├── web(Angular/React等前端应用,无项目/解决方案文件) ├── api(多项目结构的.NET 4.8 Web API解决方案)
要求:
- 支持通过
dotnet new app -n MyApp命令生成项目 - 支持在Visual Studio 2022「新建项目」界面中选择使用
- 生成时自动替换所有文件夹名、文件名、文件内容中的
MyCustomName为用户指定名称
步骤1:准备模板源文件与配置
- 整理模板源目录结构,确保所有需要替换的占位符统一为
MyCustomName:
MyTemplateSource ├── content │ ├── App │ │ ├── web # 放入你的前端应用文件,保留原有目录结构 │ │ ├── api # 放入你的.NET 4.8 Web API多项目解决方案,保留原有结构 ├── template.json
- 创建
template.json配置文件(位于MyTemplateSource根目录):
{ "$schema": "http://json.schemastore.org/template", "author": "你的名称", "classifications": ["Web", "Full Stack"], "name": "全栈应用模板(Web+API)", "shortName": "app", "tags": { "language": "C#", "type": "project" }, "sourceName": "MyCustomName", "preferNameDirectory": true, "symbols": { "name": { "type": "parameter", "description": "项目名称", "defaultValue": "MyCustomName" } } }
sourceName:指定全局替换的占位符,所有匹配的文件名、文件夹名、文件内容都会被替换shortName:对应CLI命令dotnet new app中的app标识classifications:决定模板在Visual Studio分类列表中的位置
步骤2:手动打包为NuGet包(无需csproj)
跳过dotnet pack,用NuGet CLI直接打包:
- 下载NuGet CLI并添加到系统PATH
- 在
MyTemplateSource目录下创建FullStackTemplate.nuspec文件:
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd"> <metadata> <id>FullStackAppTemplate</id> <version>1.0.0</version> <authors>你的名称</authors> <description>包含前端Web应用与.NET 4.8 Web API的全栈项目模板</description> <tags>dotnet-template web api fullstack</tags> </metadata> <files> <file src="content/**/*" target="content" /> <file src="template.json" target="template.json" /> </files> </package>
- 执行打包命令:
nuget pack FullStackTemplate.nuspec
执行完成后会生成FullStackAppTemplate.1.0.0.nupkg文件
步骤3:安装并验证模板
- 安装模板:
dotnet new install ./FullStackAppTemplate.1.0.0.nupkg
- 验证CLI可用性:
dotnet new app -n MyNewApp
生成的项目会自动替换所有MyCustomName为MyNewApp,目录结构完全保留
3. 验证Visual Studio 2022可用性:
- 打开Visual Studio 2022,点击「File > New > Project...」
- 在搜索框输入模板名称「全栈应用模板(Web+API)」或短名「app」,即可找到该模板
- 输入项目名称后生成,替换规则与CLI完全一致
注意事项
- 确保
api目录下的.sln和.csproj文件中所有需要替换的名称都使用MyCustomName作为占位符 - 前端
web目录中若有需要替换的变量,同样统一使用MyCustomName - 后续更新模板时,修改源文件后重新打包,再执行
dotnet new update或重新安装即可
内容的提问来源于stack exchange,提问作者Bardicer
相关产品推荐
相关产品推荐

