2010-12-22 8 views
1

Ich habe ein T4, das mehrere HTML-Dateien erzeugt.Warum werden die erstellten T4-Ausgänge gelöscht?

Nach dem Erstellen sie alle löscht sie dann. Ich habe gesehen, dass die Dateien sowohl in Explorer als auch in VS2010 Ultimate erstellt wurden (der Lösungs-Explorer-Balken wird größer und verkleinert sich dann gleich wieder).

Ich habe geändert Oleg Synch des updated multiple output code wie folgt:

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); 
} 

der Anfangscode Dte gesetzt ist

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"); 
    } 

es geschieht, ob ich eine Änderung vornehmen und schlagen speichern oder rechts der klicken. tt-Datei und sagen Sie laufen benutzerdefinierte Werkzeug.

Bei hilfreich es ist hier meine tt Erklärung:

<#@ 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" #> 
+0

verpasst ein Include in der Einfügung: '<# @ include file =" T4Toolbox.tt "#>' – Maslow

+0

Verwendet diese Vorlage die gleiche Protokolldatei (so dass sie Elemente entfernen kann, wenn es soll), dass der Linq-Generator tut das? Wenn ja, was beinhaltet das und ist es beschreibbar, wenn Sie Ihr benutzerdefiniertes Tool ausführen? –

+0

Ich bin mir nicht sicher, was diese Vorlage ist, sie ist standardmäßig dort, wenn ich eine neue Skriptdatei erstelle. – Maslow

Antwort

1

Entfernen

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

scheint es gelöst zu haben. ziemlich bizarr.

+0

das hat auch bei mir funktioniert, danke! – ckonig

Verwandte Themen