Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的Visual Studio T4代码输出错误?_C#_Visual Studio_T4 - Fatal编程技术网

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

C# 为什么我的Visual Studio T4代码输出错误?,c#,visual-studio,t4,C#,Visual Studio,T4,下面的说明 我试图将var personName从test1.tt传递到template1.tt,但看不到任何文件。为什么 模板1.tt <#@ template debug="false" hostspecific="true" language="C#" #> <#@ import namespace="System.IO" #> <#@ output extension=".txt" #> <#@ assembly name="System"#&g

下面的说明

我试图将var personName从test1.tt传递到template1.tt,但看不到任何文件。为什么

模板1.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);
  }
#>

CallContext.SetData(“template1.personName”、“Baby”);
ProcessTemplate(“template1.tt”、“testoutput.txt”);

Oleg的示例使用了两个模板。一个用于保存该方法,另一个用于导入该方法以调用这些方法

从帮助示例:

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);
  }
#>
ProcessTemplate.tt
此模板还打开特定于主机的选项以生成主机属性。ProcessTemplate方法使用此属性确定独立模板文件的完整路径以及输出目录。ProcessTemplate方法创建T4引擎类的一个新实例,该实例用于编译和运行独立模板

下面是一个模板,它使用此帮助器方法从两个独立模板生成两个输出文件。“(帮助示例中的文本)

Example3.tt

这是“帮助”示例中引用的第一个模板。如果您指定要获取的错误,它将有助于调试。

您会得到什么错误?
 Example3.tt
    <#@ include file="ProcessTemplate.tt" #>
    <#
        ProcessTemplate("Standalone1.tt", "StandaloneOutput1.txt");
        ProcessTemplate("Standalone2.tt", "StandaloneOutput2.txt");
    #>