2010-12-22 126 views
1

我有一個生成多個.html文件的T4。爲什麼T4輸出被創建然後被刪除?

創建它們之後,它們將刪除它們。我已經看到在explorer和VS2010終極創建的文件(解決方案資源管理器欄增長,然後收縮回來)。

我已經修改奧列格同步的updated multiple output code如下:

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

錯過了包含在粘貼中:`<#@ include file =「T4Toolbox.tt」#>` – Maslow 2010-12-22 17:00:55

+0

該模板是否使用相同的日誌文件(以便它可以在應該刪除項目時)linq生成器呢?如果是這樣,那麼它具有什麼功能,並且在運行自定義工具時是可寫的? – 2010-12-22 18:22:54

回答

1

去除

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

似乎已經解決了這個問題。很奇怪。