2012-06-18 16 views
9

Ich muss in der Lage sein, eine Klasse innerhalb einer T4-Vorlage zu verwenden, die beide in meiner Lösung enthalten sind. Ich habe eine Klasse mit dem Namen Container in Container.cs. In meiner Textvorlage möchte ich Zugriff auf Container Klasse haben. Irgendwelche Ideen wie ich das machen kann. Im Grunde so etwas wie diese:Klasse innerhalb einer T4-Vorlage verwenden

<#@ template language="C#" #>

<# var container = new Container() #>

+0

Bitte zeigen Sie Ihren Code –

Antwort

15

Im Allgemeinen, wenn Sie tatsächlich die Container-Klasse der Funktionalität in Ihrer Vorlage verwenden müssen, sollten Sie die Assembly, die Ihr Projekt laden baut. Dies führt zu einer zirkulären Abhängigkeit, da Sie eine gebaute Version Ihrer Assembly benötigen, um Code neu zu generieren, der in dieser Assembly enthalten sein wird. Beachten Sie dies also.

Wenn Sie mit VS2010 oder höher, werden Sie in der Lage sein, etwas ähnliches zu verwenden:

<#@ assembly name="$(TargetPath)" #> 
<#@ import namespace="Your.Namespace" #> 

und dann Container-Klasse verwenden.

Wenn Sie VS2010SP1 oder höher haben, werden Sie keine Probleme beim Sperren dieser Baugruppe im Speicher haben, aber wenn Sie früher sind, müssen Sie Visual Studio nach jeder Generation neu starten, bevor Sie Ihre neu erstellen können Projekt.

+2

Eine andere Option in T4 Vorlagen ist zu [File.ReadAllBytes()] (http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx) und dann [Assembly.Load()] (http://msdn.microsoft.com/en-us/library/h538bck7.aspx) das Byte-Array in den Speicher. Dies würde das Füllen qualifizierter Klassen 'new namespaces.class()' erfordern, bedeutet aber, dass Sie Visual Studio nicht jedes Mal neu starten müssen. –

+0

Danke Mann, das funktioniert wirklich super. – user1396149