为dotnet new模板添加排除测试项目的符号开关
实现dotnet new模板排除测试项目文件夹的方法
1. 完善template.json中的符号配置
确保notests符号的定义支持开关别名、默认值,让用户可以通过--notests或-notest触发:
{ "symbols": { "notests": { "type": "parameter", "datatype": "bool", "defaultValue": false, "description": "排除单元测试项目", "aliases": [ { "name": "notest", "description": "排除单元测试项目的短别名" } ] } } }
2. 配置文件夹的条件生成规则
在template.json的files节点中,针对IniConsole.Test文件夹添加条件判断,仅当notests为false时才生成该文件夹:
{ "files": [ { "path": "IniConsole", "condition": "true" // 始终生成控制台项目 }, { "path": "IniConsole.Test", "condition": "!notests" // 仅当未指定--notests时生成测试文件夹 }, { "path": "IniConsole.sln", "condition": "true" // 始终生成解决方案文件 } ] }
或者用更简洁的通配符排除写法,当notests为true时自动排除测试文件夹及所有内容:
{ "exclude": [ "**/IniConsole.Test/**/*", "**/IniConsole.Test" ], "excludeCondition": "notests" }
3. 处理解决方案文件的条件项目节点
在IniConsole.sln中用条件注释包裹测试项目相关节点,确保指定--notests时sln中不包含测试项目:
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.32014.148 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IniConsole", "IniConsole\IniConsole.csproj", "{YOUR-CONSOLE-GUID}" EndProject #if !notests Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IniConsole.Test", "IniConsole.Test\IniConsole.Test.csproj", "{YOUR-TEST-GUID}" EndProject #endif Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection // 其他全局配置... #if !notests GlobalSection(ProjectConfigurationPlatforms) = postSolution {YOUR-TEST-GUID}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {YOUR-TEST-GUID}.Debug|Any CPU.Build.0 = Debug|Any CPU {YOUR-TEST-GUID}.Release|Any CPU.ActiveCfg = Release|Any CPU {YOUR-TEST-GUID}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection #endif EndGlobal
4. 本地验证模板
打包前先本地测试:
- 将模板文件夹放到
%USERPROFILE%\.templateengine\packages(Windows)或~/.templateengine/packages(Linux/macOS) - 运行
dotnet new <你的模板名> --notests,检查生成目录是否无IniConsole.Test文件夹,sln中也无测试项目 - 不带
--notests运行,确认两个项目正常生成
内容的提问来源于stack exchange,提问作者marce
相关产品推荐
相关产品推荐

