在非 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。
我想根据开发人员 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。