2012-06-18 19 views
9

Potrzebuję móc używać klasy wewnątrz szablonu T4, z których oba znajdują się w moim rozwiązaniu. Mam klasę o nazwie Container w Container.cs. W szablonie tekstu chcę mieć dostęp do klasy Container. Wszelkie pomysły, jak mogę to zrobić. Zasadniczo coś takiego:Użyj klasy wewnątrz szablonu T4.

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

<# var container = new Container() #>

+0

Proszę podać swój kod –

Odpowiedz

15

W ogóle, jeśli trzeba właściwie wykorzystywać funkcjonalność klasa kontenera w szablonie, będziemy chcieli, aby załadować zestawu, który projekt jest budynek. Wprowadza to zależność cykliczną, ponieważ potrzebna jest wersja wbudowana zestawu w celu ponownego wygenerowania kodu, który ma zostać włączony do tego zespołu, więc należy o tym pamiętać.

Jeśli używasz VS2010 lub powyżej, będzie można używać coś takiego:

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

a następnie użyć klasy kontenera.

Jeśli masz VS2010SP1 lub wyższy, nie spowoduje to żadnych probelmów z blokowaniem tego zestawu w pamięci, ale jeśli jesteś wcześniejszy, będziesz musiał ponownie uruchomić Visual Studio po każdym pokoleniu, zanim będzie można odbudować projekt.

+2

Inną opcją w szablonach T4 jest [File.ReadAllBytes()] (http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx) i następnie [Assembly.Load()] (http://msdn.microsoft.com/en-us/library/h538bck7.aspx) tablica bajtów w pamięci. Wymagałoby to uzupełnienia klas kwalifikowanych 'new namespaces.class()', ale oznacza to, że za każdym razem nie trzeba restartować programu Visual Studio. –

+0

Dzięki stary, to naprawdę działa świetnie. – user1396149

Powiązane problemy