Freigeben über


Dieser Artikel wurde maschinell übersetzt.

Extreme ASP.NET

Text Template Transformation Toolkit und ASP.NET MVC

K. Scott Allen

Microsoft Visual Studio enthält einen Code Generation Modul als T4 (die Kurzform für Text-Vorlage Transformation Toolkit) bezeichnet. Sie haben wahrscheinlich bereits T4 Vorlagen in Visual Studio verwendet, ohne selbst kennen Sie hinter den Kulissen gearbeitet haben. In diesem Artikel werde ich Ihnen eine grundlegende Einführung in die T4-Vorlagen und gezeigt, wie ASP.NET MVC diese Technologie verwendet. Ich werde Sie auch das Anpassen von Vorlagen zur Verbesserung Ihrer täglichen Arbeit mit dem MVC Framework T4 zeigen.

Der Grundgedanke hinter der Vorlage-Toolkit wird zum Analysieren einer Eingabedatei und in eine Ausgabedatei zu transformieren. Die Eingabedatei ist ein Vorlage – eine Textdatei mit der Erweiterung .tt. Die Ausgabedatei wird auch Text enthalten, und der Text kann C#-Code, Visual Basic Code, Web Forms Code, Markup oder anderen Sie generieren müssen.

T4 in Aktion finden Sie am einfachsten erstellen Sie ein neues Projekt in Visual Studio werden. Ich werde generiert werden C#-Code in diesem Artikel, so dass Sie jedes Projekt verwenden können, die C#-Code kompiliert wird. Sobald das Projekt geöffnet ist, klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie hinzufügen | Neues Element. Wählen Sie die Textdatei aus dem Dialogfeld "Neues Element hinzufügen" (Es gibt kein Element Vorlage ausschließlich T4 in Visual Studio 2008, sondern wird es in 2010), und nennen Sie die Datei Simple.tt (Stellen Sie sicher, dass Sie die .tt-Erweiterung verwenden). Sobald die Datei in das Projekt geladen wird sofort sehen Sie eine Simple.cs-Datei, die hinter Simple.tt im Projektmappen-Explorer-Fenster angezeigt werden (siehe Abbildung 1 ).

Abbildung 1 C#-Datei hinter einer Vorlage T4

image: C# File Behind a T4 Template

Beide Simple.tt und Simple.cs wird als leere Dateien gestartet. Wenn Sie mit der rechten Maustaste auf die Simple.tt-Datei und wählen Sie Eigenschaften klicken, werden Sie feststellen, dass Visual Studio als das benutzerdefinierte Tool für die Datei TextTemplatingFileGenerator zugewiesen (siehe Abbildung 2 ). Dieser Generator handelt es sich um das T4-Datenbankmodul, das die Vorlage-Datei in eine Datei mit C#-Code umgewandelt wird.

Abbildung 2 Eigenschaften der Vorlage T4

image: Properties of the T4 Template

Um die Vorlage etwas interessanter zu machen, fügen Sie den folgenden Code hinzu:

<#@ template language="c#v3.5" #>
<#@ assembly name="System.Web.Mvc.DLL" #>
<#@ import namespace="System.Web.Mvc" #>

public class Test
{
<# for(int i = 0; i < 5; i++) { #> 
  public int Prop<#= i #> { get; set; }
<# } #>
}

Der Code beginnt mit einigen Direktiven. Direktiven können Sie angeben, die Programmiersprache für die Vorlage und Namespaces und Assemblys durch den Code in der Vorlage-von erforderlich sind. Betonen Sie, dass ich zum Ausführen von Code in den Vorlage und nicht-Code im Projekt selbst erforderlichen Einstellungen Rede werden soll. Eine Direktive können auch die Erweiterung der Ausgabedatei angeben. Der Standardwert ist c#, aber wie bereits erwähnt, können Sie Visual Basic-Code, XML, HTML oder andere textbezogene Artefakt generieren.

Die Direktiven, die ich verwende informieren das Vorlage-Modul den C#-Compiler verwenden, der im Lieferumfang von Microsoft .NET Framework 3.5 enthalten ist. Sie werden darüber informiert auch das Vorlage-Modul die ASP.NET MVC-Assembly verweisen und den System.Web.Mvc-Namespace in den Wirkungsbereich zu bringen. Das MVC-Assembly und Namespace sind nicht tatsächlich erforderlich vom einfachen Code in der Vorlage, aber ich Sie in der Vorlage als Beispiel platzieren.

Nachdem Sie die Direktiven wird bei diesem Text, der nicht zwischen < # und # > Trennzeichen ist in die Ausgabedatei wörtliche abgelegt. Der Text zwischen < # und # > ist C#-Code. Das Vorlage-Modul wird den Code analysiert und auf eine Klasse für die Ausführung (eine Klasse, die letztlich alle von der TextTransformation-Klasse in der Microsoft.VisualStudio.TextTemplating Assembly abgeleitet) hinzufügen. Dieser Prozess ähnelt der ASP.NET Ansicht Modul, in dem hinzugefügt Code und Markup in einer ASPX-Datei auf eine Klasse, die letztlich alle von System.Web.UI.Page abgeleitet. Wenn Sie bereits Ihre MVC-Ansichten mithilfe des Web Forms-Ansicht-Moduls geschrieben haben, müssen Sie der Meinung sind vertraut Erstellen von Vorlagen. C#-Code können Sie in der ASPX-Dateien HTML generieren. C#-Code verwende ich in meiner Datei .tt C#-Code generieren.

Der Code, den ich in Simple.tt habe wird die folgende c#-Ausgabe in Simple.tt.cs erzeugt:

public class Test
{
  public int Prop0 { get; set; }
  public int Prop1 { get; set; }
  public int Prop2 { get; set; }
  public int Prop3 { get; set; }
  public int Prop4 { get; set; }
}

Natürlich die Test-Klasse ist vollständig nutzlos und vollständig uninteressant, aber es bleibt zu hoffen, dass Sie eine Vorstellung von den Möglichkeiten gibt, die mit T4 Vorlagen vorhanden sind. Da beim Schreiben von C#-Code in der Vorlage können eine Verbindung mit Datenbanken herstellen, Daten aus dem Dateisystem lesen, Analysieren von XML- oder einer beliebigen Klasse .NET verwenden, um eine Verbindung herzustellen, und Lesen von Metadaten, die irgendwo in Ihrer Umgebung vorhanden ist. Diese Metadaten, wie z. B. ein Datenbankschema oder die Typen in einer anderen Assembly handelt es sich um Informationen, die Sie verwenden können, um Klassen zu generieren. Die Klassen werden Teil des aktuellen Projekts, so dass Sie in der aktuellen Assembly kompiliert werden und Sie können Sie in Ihrer Anwendung verwenden.

T4 bearbeiten

Beim Bearbeiten von Vorlagen in Visual Studio T4 haben Sie in der IDE, wie IntelliSense und Syntaxhervorhebung aus die Sprachdienste ist keine Hilfe. Es gibt zwei Lösungen für dieses Problem. Eine ist das Visual T4 Editor Clarius Consulting (visualt4.com ) erhältlich. Eine andere Lösung wäre die Tangible T4-Editor von Tangible Engineering (t4-editor.tangible-engineering.com ).

Mit ein grundlegendes Verständnis der Funktionsweise von T4 Vorlagen, let’s betrachten wie das MVC Framework T4 Vorlagen verwendet.

T4 in ASP.NET MVC

Sie haben T4 Vorlagen verwendet jedes Mal, wenn Sie die Ansicht hinzufügen oder die hinzufügen-Controller-Features in einem ASP.NET MVC-Projekt verwendet. Diese Vorlagen befinden sich in der Visual Studio-Installation im Ordner 2\CodeTemplates Common7\IDE\ItemTemplates\CSharp\Web\MVC. Visual Basic-Versionen der Vorlage auch vorhanden sein, aber ich werde es als Übung für den Leser auf den Namen des Ordners ableiten lassen.

Die Vorlagen selbst bieten eine hervorragende Ausbildung auf den Wert und die Features von T4. Hier ist z. B. ein Auszug aus List.tt in AddView Unterordner des CodeTemplates:

  if(!String.IsNullOrEmpty(mvcViewDataTypeGenericString)) {
    Dictionary<string, string> properties = 
      new Dictionary<string, string>();
    FilterProperties(mvcHost.ViewDataType, properties);
  #>
    <table>
      <tr>
        <th></th>
  <#
    foreach(KeyValuePair<string, string> property in properties) {
  #>
        <th>
          <#= property.Key #>
        </th>
  <#
    }
  #>

Die Auftrag List.tt ist eine ASPX-Datei zu erstellen, die eine Auflistung von Objekten Modell in tabellarischer Form anzeigt. Im der Vorlage finden Sie in der Tabelle tr "und" th-Tags geschrieben werden. Zum Erzeugen der ASPX-benötigt die Vorlage-Datei einige kontextabhängige Informationen wie den Namen der Masterseite, die Sie verwenden sollten und den Typ des Modells. Der Vorlage kann diese Informationen über das Host-Objekt abrufen. Das Host-Objekt befindet sich zwischen einem Vorlage und das Datenbankmodul T4 und können Sie eine Vorlage-Zugriff auf Ressourcen (wie z. B. lokale Dateien) und Umgebungseinstellungen gewähren. In der Regel die Host ist Visual Studio, aber das MVC-Team erstellt eine benutzerdefinierte Host des Typs MvcTextTemplateHost in der Assembly Microsoft.VisualStudio.Web.Extensions. Es ist dieses benutzerdefinierte Host-Objekt, das Weiterleiten der Informationen Sie in der Ansicht hinzufügen und Controller hinzufügen (Dialogfelder), geben Sie die Dinge, die am nächsten sind befördert, die Sie auf in einem MVC-Projekt-Assistenten finden.

List.TT wird die darstellbaren Eigenschaften des Objekts mit starker Typisierung Modell durchlaufen, und erstellen Sie eine Tabelle mit einer Spalte für jede Eigenschaft. Der Vorlage verwendet Reflektion, um die verfügbaren Eigenschaften in einer FilterProperties-Methode das Modell zu entdecken. FilterProperties ist eine Hilfsmethode, die später in der Vorlage-Datei definiert. Die Vorlage auch richtet Verknüpfungen mit den Aktionen, die bearbeiten und Details zu navigieren, und richtet die richtigen @ Page- oder @ Control-Direktiven für die aspx-je nachdem, ob Sie eine Ansicht oder einer Teilansicht erstellen.

Die Vorlage ist abgeschlossen ausgeführt, haben Sie eine neue ASPX-mit alles anzeigen, Sie eine Auflistung von Objekten Modell anzuzeigen müssen. Vermutlich haben Sie in der ASPX-Datei wechseln und führen Sie einige optimieren, damit die Ansicht in den Rest der Anwendung konsistent mit dem Aussehen und Verhalten der Ansichten.

Wenn Sie immer die gleichen Änderungen an diesen generierten Ansichten (oder mit Controller.tt generierten Controller-Code) vornehmen, können Sie Zeit sparen, indem Sie die Vorlagen selbst ändern. Beispielsweise könnten Sie hinzuzufügende Klassenattribute für Formatierungsregeln, die Sie in Ihrem Projekt oder vielleicht etwas noch drastische verwenden die integrierten Vorlagen ändern. Müssen Sie berücksichtigen, das Ändern der Vorlage-Dateien im Installationsverzeichnis von Visual Studio in allen Projekten, die Arbeit mit auf Ihrem Computer generierten Code ändern. Wenn Sie den generierten Code für ein einzelnes Projekt ändern möchten, können Sie zu dazu.

Project-T4-Anpassung

Wenn Sie benutzerdefinierte Versionen der Codegenerierung Vorlagen auf Projektbasis möchten, ist Ihre erste Schritt CodeTemplates-Ordner aus der Visual Studio-Installation kopieren und fügen Sie ihn in das Stammverzeichnis des Projekts ASP.NET MVC. Sie müssen jedoch alle Vorlagen in Ihr Projekt kopieren. Sie können nur die Vorlagen kopieren, die Sie ändern möchten. Es gibt insgesamt sechs MVC Codegenerierung Vorlagen, eine für einen Controller (Controller.tt) und 5 für das Hinzufügen von Ansichten (Create.tt, Details.tt, Edit.tt, Empty.tt, List.tt) hinzufügen. Wenn ein Vorlage in Ihrem Projekt vorhanden ist, wird die Vorlage im Installationsverzeichnis von Visual Studio überschrieben.

Wenn Sie eine Visual Studio-Projektmappe eine Datei .tt hinzugefügt haben, wird die IDE automatisch der Datei .tt TextTemplatingFileGenerator die Einstellung benutzerdefiniertes Tool zuweisen. Dieses Verhalten haben bereits gesehen werden, wenn Sie die Simple.tt-Vorlage erstellt, die ich bereits erwähnt. Dies ist jedoch nicht die richtige Einstellung für die MVC T4-Vorlagen. Das MVC-Tools für Visual Studio werden diese Vorlagen zum geeigneten Zeitpunkt aufrufen und erstellen Sie das spezielle MvcTextTemplateHost-Objekt während der Verarbeitung von Vorlage. Folglich ist nach dem Kopieren der Vorlagen in das Projekt, das zweite Schritt, öffnen Sie das Fenster "Eigenschaften" für jede Datei Vorlage und entfernen Sie die Einstellung benutzerdefiniertes Tool (lassen Sie die Einstellung leere). An dieser Stelle können Sie Ihre Vorlagen anpassen.

Eigenschaften von MvcTextTemplateHost
Beachten Sie, dass nicht alle Eigenschaften für das MvcTextTemplateHost-Objekt für jeden Kontext verfügbar sind. Die Vorlagen ausgeführt werden, wenn Sie die Ansicht hinzufügen und Controller hinzufügen Kontextmenüelemente aufrufen. Die Namespace-Eigenschaft ist für beide dieser Operationen verfügbar und wird auf den entsprechenden Wert festgelegt werden. Die MasterPage-Eigenschaft, allerdings nur auf einen gültigen Wert festgelegt, während eines Vorgangs Ansicht hinzufügen und enthält den Wert der vom Benutzer eingegeben wurde, für die MasterPage-Namen im Dialogfeld Ansicht hinzufügen.

Z. B. let’s sagen Sie nicht möchten, dass Ihre Domänencontroller ein Aktion Index haben. Sie würden stattdessen eine List Standard-Aktion verwenden. Sie können die Controller.tt-Vorlage im Ordner "CodeTemplates\AddController" zu öffnen und ändern Sie den entsprechenden Bereich des Code wie folgt aussehen:

public class <#= mvcHost.ControllerName #> : Controller
{
  // GET: /<#= mvcHost.ControllerRootName #>/

  public ActionResult List()
  {
    return View();
  }
...

Dies ist eine einfache Änderung vornehmen, aber es kann speichern Sie und Ihr Team sehr wenig Zeit für die Lebensdauer eines großen Projekts.

Eine Weiterentwicklung – T4MVC

Im Sommer 2009 erstellt David Ebbo des ASP.NET-Teams T4MVC, eine T4 Vorlage mit strikter Typbindung Hilfsprogramme in einer Anwendung ASP.NET MVC generieren soll. Ebbo ist die Vorlage über einen Zeitraum verfeinert und können es von aspnet.codeplex.com/wikipage?title=T4mvc jetzt herunterladen.

Die T4MVC-Vorlage ist eine traditionelle T4 Vorlage. Sie T4MVC.tt und seine zugeordneten Einstellungsdatei (T4MVC.settings.t4) zu Ihrem Projekt hinzufügen, und es wird das benutzerdefinierte Tool TextTemplatingFileGenerator zum Generieren von C#-Code verwenden. T4MVC hilft Ihnen, viele der Magic Zeichenfolgenliterale von der MVC-Anwendung zu entfernen. Beispielsweise ist eine der Aufträge, die führen Sie die Vorlage wird, zum Scannen der Ordner Inhalte und Skripts im Projekt und Generieren von Klassen mit statischen Eigenschaften jedes Skript und die Inhalte darstellen.

Der generierte Code bedeutet, dass die LogOnUserControl teilweise Ansicht in das MVC-Standardprojekt mit diesem Code wiedergegeben werden können:

<% Html.RenderPartial(MVC.Shared.Views.LogOnUserControl); %>

Zuvor würde Sie ein Zeichenfolgenliteral verwendet haben:

<% Html.RenderPartial("LogOnUserControl"); %>

Wenn jemand benennt, verschiebt oder die LogonUserControl löscht, wird der stark typisierte Code ein Kompilierungsfehler auf, wenn die Ansicht kompiliert. Zusätzlich zu den stark typisierten Zugriff auf und teilweise Ansichten enthält die T4MVC-Vorlage stark typisierten Zugriff auf alle Dateien in den Ordnern, auf die Inhalte und Skripts und stark typisierten Zugriff auf Domänencontroller und Domänencontroller Aktionen.

Beim Erstellen von Aktion-Verknüpfungen, Zurückgeben von Ergebnissen der Ansicht, und selbst wenn die Routingtabelle für eine Anwendung erstellen, können Sie die T4MVC generierten Klassen verwenden. Beachten Sie, dass beim ersten T4MVC zu Ihrem Projekt hinzufügen, einige Warnungen generiert, in der IDE Fenster angezeigt werden. Diese Warnungen werden nur T4MVC informiert Sie über einige Änderungen auf Code angewendet wird. Die meisten dieser Änderungen sind nichts, die das Verhalten Ihrer Anwendung ändern; die T4MVC-Vorlagen einfach einige teilweise Schlüsselwörter hinzufügen, um Klassendefinitionen für Domänencontroller und werden auch nehmen non-virtual Aktion Methoden virtuellen. Überprüfen Sie weitere Informationen zu T4MVC Ebbo des Blog unter blogs.msdn.com/davidebb .

Einfacher zu verwalten

T4 eine wunderbare Schatz innerhalb von Visual Studio ist jedoch noch nicht well-publicized. Dieser Artikel bietet Ihnen alles, was Sie, benötigen um mit benutzerdefinierten Vorlagen für das ASP.NET MVC-Projekt zu beginnen. Es bleibt zu hoffen, können Sie einige Verwendungsmöglichkeiten für T4 Vorlagen außerhalb von Ihrem Webanwendungsprojekt zu finden. Sie sollten auch die T4MVC-Vorlagen in Ihrem Projekt ausprobieren Sie Ihrem Code leichter zu verwalten und umgestalten vornehmen. Vorrücken, T4-Technologie ist auch in Visual Studio 2010 besser mit den dedizierten Elementvorlagen und Vorlagen vorkompiliert.

K. Scott Allen  ist principal Berater und Gründer von OdeToCode und auch ein Mitglied des technischen Personals Pluralsight. Sie können Allen über seinen Blog (odetocode.com/blogs/scott ) oder auf Twitter (twitter.com/OdeToCode ) erreichen.

Dank an den folgenden technischen Experten für die Überprüfung dieses Artikels: David Ebbo