为什么我的Visual Studio T4代码输出错误?

问题描述:

这里继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

奥列格的例子使用了两个模板。一个持有该方法,另一个输入它来调用方法。

从帮助例如:

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

这是在帮助例子引用的第一个模板。如果你指定了错误,你将得到它将有助于调试。