Templates 如何使用.NET CLI自定义模板获取项目名称的驼峰大小写版本

Templates 如何使用.NET CLI自定义模板获取项目名称的驼峰大小写版本,templates,dotnet-cli,Templates,Dotnet Cli,我正在尝试为dotnetcli创建一个模板项目,需要更改项目名称的格式以进行替换。具体地说,我们域中的约定使用项目名称的驼峰大小写版本作为需要存储在配置文件中的标识符 通常情况下,模板会执行一个非常简单的搜索/替换操作,将模板项目名称替换为使用dotnet new创建的项目名称。此搜索区分大小写,因此它将只拾取大小写完全相同的名称实例 然而,在我的例子中,我还需要它匹配名称的驼峰大小写版本,并用新名称的驼峰大小写版本替换它。这可能吗 有相当多的信息,并显示有一个参数生成器支持大小写转换,但明确表

我正在尝试为dotnetcli创建一个模板项目,需要更改项目名称的格式以进行替换。具体地说,我们域中的约定使用项目名称的驼峰大小写版本作为需要存储在配置文件中的标识符

通常情况下,模板会执行一个非常简单的搜索/替换操作,将模板项目名称替换为使用dotnet new创建的项目名称。此搜索区分大小写,因此它将只拾取大小写完全相同的名称实例

然而,在我的例子中,我还需要它匹配名称的驼峰大小写版本,并用新名称的驼峰大小写版本替换它。这可能吗

有相当多的信息,并显示有一个参数生成器支持大小写转换,但明确表示它不支持驼峰大小写。我真正需要的是能够将第一个字符从大写改为小写

你知道我怎样才能插入项目名称的驼峰式版本吗

下面是我的实验性template.json,用于大写和小写,以及命令行参数,但对于camel case显然什么都没有

{
  "$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"
    }
  }
}
Pull请求引入了一个(n尚未记录)
join
生成器。有了这个,以及未记录的,您可以将项目名称分为[第一个字母]和[其余的],将[第一个字母]转换为小写,然后重新连接它们。假设您是从PascalCase开始的,这将为您提供camelCase中的名称

还有另一种选择

下面,符号
temp1
将项目名称传递给自定义转换
lowercaseefirstletter
,它本身是自定义转换
第一个字母
小写
的组合。符号
temp2
通过transform
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"
  }
}