Почему выходы T4 создаются, а затем удаляются? - PullRequest
1 голос
/ 22 декабря 2010

У меня есть T4, который генерирует несколько файлов .html.

После их создания он удаляет их.Я видел, как файлы создаются в обозревателе и VS2010 Ultimate (панель обозревателя решений увеличивается, а затем уменьшается обратно).

Я изменил обновленный множественный выходной код Олега Синча следующим образом:

ProjectItem GetTemplateItem(DTE dte)
{
 return   // Find the .tt file's ProjectItem
 dte.Solution.FindProjectItem(Host.TemplateFile);
}

void SaveOutput(string outputFileName,List<string> savedOutputs)
 {
  string templateDirectory = Path.GetDirectoryName(Host.TemplateFile);
  string outputFilePath = Path.Combine(templateDirectory, outputFileName);  
  var text= this.GenerationEnvironment.ToString();
  WriteDiagnosticLine("Writing:"+text.Length+" characters");
  File.WriteAllText(outputFilePath,text);
  this.GenerationEnvironment = new StringBuilder();  

  ProjectItem templateProjectItem = GetTemplateItem(Dte);

  templateProjectItem.ProjectItems.AddFromFile(outputFilePath);  

  savedOutputs.Add(outputFileName);

  WriteDiagnosticLine("Added:"+outputFileName);
 }

void WriteDiagnosticLine(string line)
{
System.Diagnostics.Debug.WriteLine(line);
}

исходный код для установки Dte - это

bool AlwaysKeepTemplateDirty = true;
DTE Dte;
var serviceProvider = Host as IServiceProvider;

    if (serviceProvider != null) {
        Dte = serviceProvider.GetService(typeof(SDTE)) as DTE;
    }

    // Fail if we couldn't get the DTE. This can happen when trying to run in TextTransform.exe
    if (Dte == null) {
        throw new Exception("T4Generator can only execute through the Visual Studio host");
    }

, случается ли я вносить изменения и нажимать сохранить, или щелкнуть правой кнопкой мыши файл .tt и сказать запустить пользовательский инструмент.

Если это полезно, вот мое объявление tt:

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension=".txt" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="Microsoft.VisualStudio.Shell.Interop.8.0" #>
<#@ assembly name="EnvDTE" #>
<#@ assembly name="EnvDTE80" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="Microsoft.VisualStudio.Shell.Interop" #>
<#@ import namespace="EnvDTE" #>
<#@ import namespace="EnvDTE80" #>

1 Ответ

1 голос
/ 25 января 2011

удаление

<#@ include file="T4Toolbox.tt" #>

, кажется, решило это.довольно странно.

...