t4 создать файл без атрибута DependentUpon в файле csproj - PullRequest
4 голосов
/ 08 августа 2011

Мы используем шаблоны t4 для управления конфигурациями в нашем проекте.И файл web.config генерируется через файл web.tt.После генерации в файле csproj у меня следующее:

<Content Include="Web.config">
  <AutoGen>True</AutoGen>
  <DesignTime>True</DesignTime>
  <DependentUpon>Web.tt</DependentUpon>
</Content>

Можно ли как-то настроить шаблон t4 для генерирования независимого файла web.config, а не в web.tt?

Web.config file depends upon web.tt

1 Ответ

3 голосов
/ 28 августа 2011

Да, вы можете.Сначала определите процедуру сохранения в включаемом файле T4.

SaveOutput.tt :

<#@ template language=“C#” hostspecific=“true” #>
<#@ import namespace=“System.IO” #>
<#+
  void SaveOutput(string fileName)
  {
      string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
      string outputFilePath = Path.Combine(templateDirectory, fileName);
      File.WriteAllText(outputFilePath, this.GenerationEnvironment.ToString()); 

      this.GenerationEnvironment.Remove(0, this.GenerationEnvironment.Length);
  }
#>

Теперь каждый раз, когда вы вызываете SaveOutput с именем файла, он будет записыватьтекущий буфер для этого внешнего файла.Например.

Web.tt :

<#@ include file=“SaveOutput.tt” #>
<#
    GenerateConfig();
    SaveOutput(”..\..\Web.Config”);  
#>

Если вы хотите создать несколько файлов:

<#@ include file=“SaveOutput.tt” #>
<#
    GenerateFile1();
    SaveOutput(”..\..\File1.txt”);  

    GenerateFile2();
    SaveOutput(”..\..\File2.txt”); 
#>
...