2009-04-30 8 views
1

ich eine Bibliothek, die eine Klasse I fügen Sie eine tt-DateiCan T4-Vorlagen verwenden, um die gleiche Bibliothek

<#@ template debug="false" hostspecific="false" language="C#" #> 
<#@ output extension=".cs" #> 
<#@ import namespace="ClassLibrary1" #> 
<#@ assembly name="ClassLibrary.dll" #> 

enum MilkRate{ Walmart=<#= Class1.Rate #>} 

ich Fehler „Übersetzen Transformation

namespace ClassLibrary1 
{ 
    public class Class1 
    { 
     public static readonly int Rate = 5; 
    } 
} 

Im gleichen lib definiert: Metadaten-Datei 'ClassLibrary.dll' konnte nicht gefunden werden d: \ Dokumente \ Visual Studio 10 \ Projekte \ ConsoleApplication2 \ ClassLibrary1 \ TextTemplate1.tt "

Wie löst man das?

[Tritt auf VS 2010 VS2008]

+0

Was ist eine TT-Datei? – CSharper

+1

http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx –

+1

(Sie können auch das T4-Tag hinzufügen) –

Antwort

1

Ich bin nicht sicher, ob das möglich ist.

Ich denke, das Problem, das ich damit haben könnte ist: Ihre Vorlage erzeugt Code, der die DLL ändern wird, die es referenziert!

Eine Sache, die Sie tun können, ist eine Vorlage Referenz eine andere Vorlage haben mit:

<#@ include file="Helper.tt" #> 

Auf diese Weise Sie Rate = 5 in einer zentralen Vorlage definieren könnte und alles andere Referenz haben, dass. Sie könnten sogar eine Vorlage erstellen, um Ihre Class1 Klasse zu generieren, so dass alles an einem zentralen Ort aufbewahrt wird.

Ich weiß, dass das nicht direkt Ihre Frage beantwortet, aber ich hoffe, es ist in jeder Hinsicht nützlich.

1

Sie können dies tun, aber es gibt Probleme mit dieser 'rekursiven' Arbeitsweise, die Sorgfalt erfordern.

In VS2010 können Sie VS Makrovariablen, $ (SolutionDir), $ (ProjectDir) und Freunde in Ihrer < # @ Assembly #> Direktive, z.

< # @ Montag name = "$ (ProjectDir) $ (OutDir) ClassLibrary.dll" #>

Wenn Sie dann einen Entwickler steuert eine sauberen get von der Quelle, werden sie ein zu tun haben bauen, bevor sie eine funktionierende Transformation durchführen können.

Wenn sie zuerst transformieren, wird die Transformation fehlschlagen, dann wird ihr Build fehlschlagen und sie werden stecken bleiben und müssen Dateien zurücksetzen. Es ist keine große Sache, aber es kann folgen.