2 Stimmen

Warum gibt mein Visual Studio T4-Code einen Fehler aus?

Hier finden Sie folgende Anweisungen http://www.olegsych.com/2008/03/how-to-generate-multiple-outputs-from-single-t4-template/

Ich habe versucht, var personName von test1.tt an template1.tt zu übergeben, aber ich kann keine Datei sehen, warum?

Vorlage1.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);
  }
#>

3voto

Noel Punkte 599

In Olegs Beispielen werden zwei Vorlagen verwendet. Eine, die die Methode enthält, und eine zweite, die sie importiert, um die Methoden aufzurufen.

Von der Hilfe Beispiel:

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

Mit dieser Vorlage wird auch die hostspezifische Option zur Erzeugung der Eigenschaft Host aktiviert. Die Methode ProcessTemplate verwendet diese Eigenschaft, um den vollständigen Pfad der eigenständigen Vorlagendatei sowie das Ausgabeverzeichnis zu ermitteln. Die ProcessTemplate-Methode erstellt eine neue Instanz der T4-Engine-Klasse, mit der sie die eigenständige Vorlage kompiliert und ausführt.

Hier ist eine Vorlage, die diese Hilfsmethode verwendet, um zwei Ausgabedateien aus zwei eigenständigen Vorlagen zu erzeugen." (Text aus dem Hilfebeispiel)

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

Dies ist die erste Vorlage, auf die im Hilfebeispiel verwiesen wird. Wenn Sie den Fehler angeben, den Sie erhalten, hilft das bei der Fehlersuche.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X