我正在尝试为 dotnet CLI 创建一个模板项目,我需要更改项目名称的格式以进行一些替换。具体来说,我们领域内的约定使用项目名称的驼峰式版本作为需要存储在配置文件中的标识符。
通常情况下,模板执行看起来非常简单的搜索/替换模板项目名称到您使用 dotnet new 创建的项目的名称。此搜索区分大小写,因此它只会选择大小写完全相同的名称实例。
但是在我的例子中,我还需要它来匹配名称的驼峰式版本,并将其替换为新名称的驼峰式版本。这可能吗?
This reference有相当多的信息,this显示有参数生成器支持大小写转换,但是具体说不支持驼峰式大小写。我真正需要的是能够将第一个字符从大写更改为小写。
知道如何插入项目名称的驼峰式版本吗?
这里是我实验的大小写template.json和命令行参数,但是驼峰式外壳显然没有。
{
"$schema": "http://json.schemastore.org/template",
"identity": "TemplateTest.CSharp",
"groupIdentity": "TemplateTest.Console",
"author": "TemplateTest",
"classifications": [ "Common", "Console" ],
"name": "TemplateTest console template",
"shortName": "test",
"preferNameDirectory": true,
"tags": {
"language": "C#"
},
"sourceName": "TemplateTest",
"symbols": {
"apiname": {
"type": "parameter",
"datatype": "text",
"defaultValue": "##FIX THIS##",
"replaces": "templateTest"
},
"nameUpper": {
"type": "generated",
"generator": "casing",
"parameters": {
"source": "name",
"toLower": false
},
"replaces": "TEMPLATETEST"
},
"nameLower": {
"type": "generated",
"generator": "casing",
"parameters": {
"source": "name",
"toLower": true
},
"replaces": "templatetest"
}
}
}
最佳答案
拉取请求 #1723引入了一个(n as-yet undocumented)join
生成器。有了这个,还有未记录的derived symbols , 可以将项目名称拆分为[首字母]和[其余],将[首字母]转为小写,重新拼接。假设您从 PascalCase 开始,这将为您提供驼峰命名法。
define regexes which replace each individual uppercase letter 还有另一个选项.
下面,符号 temp1
将项目名称传递给自定义转换 lowerCaseFirstLetter
,它本身是自定义转换 firstLetter
和小写
。符号 temp2
通过转换 afterFirstLetter
传递名称。
firstLetter
和 afterFirstLetter
使用相同的正则表达式将第一个字母捕获为 $1
并将其余字母捕获为 $2
, 但分别只返回第一个和第二个捕获组。
最后,符号apiname
连接temp1
和temp2
,并使用结果替换templateTest
的实例在模板内容中。
"symbols": {
"temp1": {
"type": "derived",
"valueSource": "name",
"valueTransform": "lowerCaseFirstLetter"
},
"temp2": {
"type": "derived",
"valueSource": "name",
"valueTransform": "afterFirstLetter"
},
"apiname": {
"type": "generated",
"generator": "join",
"replaces": "templateTest",
"parameters": {
"symbols": [
{
"type": "ref",
"value": "temp1"
},
{
"type": "ref",
"value": "temp2"
}
]
}
}
},
"forms": {
"lowerCaseFirstLetter": {
"identifier": "chain",
"steps": [
"firstLetter",
"lowerCase"
]
},
"firstLetter": {
"identifier": "replace",
"pattern": "^(.)(.*)",
"replacement": "$1"
},
"afterFirstLetter": {
"identifier": "replace",
"pattern": "^(.)(.*)",
"replacement": "$2"
},
"lowerCase": {
"identifier": "lowerCase"
}
}
关于templates - 如何使用 .NET CLI 自定义模板获取项目名称的驼峰式版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55738119/