Добавить дополнительный контент в do tnet новые шаблоны в не c# файлах - PullRequest
2 голосов
/ 04 февраля 2020

Я хочу изменить содержимое файла README.md на основе того, что разработчик выбирает при создании решения c# из шаблона. Как мне это сделать?

Я знаю, что вы можете определить

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

в template.config/template.json, чтобы включить дополнительный контент в tnet новых шаблонах.

В c# код, затем вы можете использовать определенный символ для включения некоторого кода, если для EnableContent установлено значение true (с использованием c# директив препроцессора)

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

#endif

И в .cs html it можно использовать как

@*#if (EnableContent)
<p>foobar</p>
#endif*@

Есть ли способ добавить аналогичные решения в файлы, отличные от c#, такие как файлы уценки (.md)? Или это зависит от наличия директив препроцессора c#? Если это так, есть ли обходной путь для использования директив препроцессора c# в файлах уценки в контексте использования шаблонов для do tnet new.

ps. Я знаю, что в этом примере я мог бы просто сделать две разные версии README.md и затем выбрать правильную, используя модификаторы исходного кода

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

в template.config/template.json, но моя фактическая потребность более сложна.

1 Ответ

3 голосов
/ 11 февраля 2020

Я, в конце концов, понял это сам. Существует способ, называемый SpecialCustomOperations, для определения собственного «языка» для включения необязательного содержимого в любом текстовом файле.

Это немного плохо задокументировано, но найдено большое значение из этот ответ , чтобы включить файлы разметки SpecialCustomOperations.

В 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). Там вам нужно определить (следуя примеру в этот компонент )

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

пс. список типов файлов, в которых специальные операции включены по умолчанию, можно найти здесь . В других типах файлов необходимо определить SpecialCustomOperations вручную.

...