在非 c# 文件的 dotnet 新模板中添加可选内容

Add optional content in dotnet new templates in non c# files

我想根据开发人员 select 在从模板创建 c# 解决方案时修改 README.md 的内容。我该怎么做?

我知道你可以定义

"symbols": {
    "EnableContent":{
        "type": "parameter",
        "dataType":"bool",
        "defaultValue": "true"
    }
}

template.config/template.json 中启用 dotnet 新模板中的可选内容。

在 c# 代码中,如果 EnableContent 设置为 true(使用 c# 预处理器指令),则可以使用定义的符号来包含一些代码

#if (EnableContent)
        public string foo()
        {
            return "bar";
        }

#endif

并且在 .cshtml 中它可以像

一样使用
@*#if (EnableContent)
<p>foobar</p>
#endif*@

有什么方法可以在非 c# 文件(如 markdown 文件 (.md))中添加类似的决策?或者这是否取决于 c# 预处理器指令是否可用?如果是这样,在使用 dotnet new 模板的上下文中,是否有任何解决方法可以在降价文件中使用 c# 预处理器指令。

ps。我知道在这个例子中我可以只做两个不同版本的 README.md 然后 select 使用源修饰符

更正一个
"sources": [
    {
        "modifiers": [
            {
                "condition": "(EnableContent)",
                "exclude": [ "README1.md" ]
            },
            {
                "condition": "(!EnableContent)",
                "exclude": [ "README2.md" ]
            }
        ]
    }

template.config/template.json 但我的实际需要比这更复杂。

我最终自己弄清楚了这一点。有一种称为 SpecialCustomOperations 的方法可以定义您自己的“语言”以在任何文本文件中启用可选内容。

在 markdown 文件中启用 SpecialCustomOperations 有点badly documented feature, but I found great value from

template.config/template.json中需要定义

"SpecialCustomOperations": {
  "**/*.md": {
    "operations": [
      {
        "type": "conditional",
        "configuration": {
          "if": ["---#if"],
          "else": ["---#else"],
          "elseif": ["---#elseif", "---#elif"],
          "endif": ["---#endif"],
          "trim" : "true",
          "wholeLine": "true",
        }
      }
    ]
  }
}

接下来的作品

---#if (FooBar)
Foo bar
---#elif (BarBaz)
Bar baz
---#else
Baz qux
---#endif

此外,我发现你可以为csproj文件定义类似的操作(基本上就是xml)。在那里你需要定义(按照 this commnent 中的示例)

"SpecialCustomOperations": {
"**/*.xaml": {
  "operations": [
    {
      "type": "conditional",
      "configuration": {
        "actionableIf": [ "<!--#if" ],
        "actionableElse": [ "#else", "<!--#else" ],
        "actionableElseif": [ "#elseif", "<!--#elseif" ],
        "endif": [ "#endif", "<!--#endif" ],
        "trim" : "true",
        "wholeLine": "true",
      }
    }
  ]
}
}

ps。可以找到默认启用特殊操作的文件类型列表 here。在其他文件类型中,需要手动定义 SpecialCustomOperations。