2011-01-09 101 views
2

這裏繼insructions http://www.olegsych.com/2008/03/how-to-generate-multiple-outputs-from-single-t4-template/爲什麼我的Visual Studio T4代碼輸出錯誤?

我試圖從test1.tt通過VAR PERSONNAME到template1.tt,但我看不到任何文件,爲什麼?

template1.tt

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ import namespace="System.IO" #> 
<#@ output extension=".txt" #> 
<#@ assembly name="System"#> 

hello <#= personName #> 

TEST1 .tt

<#@ template language="C#" hostspecific="True" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> 
<#@ import namespace="System.Runtime.Remoting.Messaging" #> 

      CallContext.SetData("template1.personName", "Baby"); 
      ProcessTemplate("template1.tt","testoutput.txt"); 

<#+ 
    void ProcessTemplate(string templateFileName, string outputFileName) { 
    string templateDirectory = Path.GetDirectoryName(Host.TemplateFile); 
    string outputFilePath = Path.Combine(templateDirectory, outputFileName); 

    string template = File.ReadAllText(Host.ResolvePath(templateFileName)); 
    Engine engine = new Engine(); 
    string output = engine.ProcessTemplate(template, Host); 

    File.WriteAllText(outputFilePath, output); 
    } 
#> 
+0

究竟是什麼錯誤,你會得到什麼? – cdhowie 2011-01-09 19:16:05

回答

3

奧列格的例子使用了兩個模板。一個持有該方法,另一個輸入它來調用方法。

從幫助例如:

ProcessTemplate.tt 
<#@ template language="C#" hostspecific="True" #> 
<#@ import namespace="System.IO" #> 
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #> 
<#+ 
    void ProcessTemplate(string templateFileName, string outputFileName) 
    { 
    string templateDirectory = Path.GetDirectoryName(Host.TemplateFile); 
    string outputFilePath = Path.Combine(templateDirectory, outputFileName); 

    string template = File.ReadAllText(Host.ResolvePath(templateFileName)); 
    Engine engine = new Engine(); 
    string output = engine.ProcessTemplate(template, Host); 

    File.WriteAllText(outputFilePath, output); 
    } 
#> 

這個模板也打開了hostspecific選項生成主機屬性。 ProcessTemplate方法使用此屬性來確定獨立模板文件的完整路徑以及輸出目錄。 ProcessTemplate方法創建一個T4 Engine類的新實例,它用於編譯和運行獨立模板。

下面是一個使用這個輔助方法來生成兩個獨立的模板兩個輸出文件的模板。」(文從幫助例子)

Example3.tt 
    <#@ include file="ProcessTemplate.tt" #> 
    <# 
     ProcessTemplate("Standalone1.tt", "StandaloneOutput1.txt"); 
     ProcessTemplate("Standalone2.tt", "StandaloneOutput2.txt"); 
    #> 

這是在幫助例子引用的第一個模板。如果你指定了錯誤,你將得到它將有助於調試。

相關問題