2013-04-05 7 views
7

Używam kilku szablonów T4 do generowania kilku plików T4, a większość z nich ma wiele wspólnego tego samego kodu, więc naturalnie chciałbym utworzyć z niego funkcję i umieścić ją w innym pliku, który Pliki T4 mogą uzyskać dostęp.Czy mogę wykonać kod z innego pliku w szablonie T4 .tt do generowania kodu?

Jednak nie wydaje mi się, aby znaleźć sposób, lub Google, aby rzeczywiście używać kodu przechowywanego w innym pliku.

Czy to możliwe? a jeśli tak, czy istnieje prosty przykład tego, jak to zrobić?

+0

Czy możesz nam powiedzieć trochę więcej o scenariuszu, ponieważ odpowiedź zależy od tego, w jaki sposób korzystasz z T4, na przykład rusztowanie widoku Asp.net w porównaniu z podstawowymi transformacjami w twoim rozwiązaniu. – GarethJ

+0

@GarethJ Pliki t4 sprawdzają tabele identyfikatorów w SQL i generują plik .cs z wyliczeniami odpowiadającymi identyfikatorowi. Dziękujemy za pomoc do tej pory! =) – Kyle

Odpowiedz

6

Z twojego pytania wynika, że ​​używasz T4 w zwykłym pliku szablonu w swoim rozwiązaniu. W takim przypadku można po prostu użyć dyrektywy <#@ include #>, aby pobrać udostępniony kod. Jest to mechanizm włączania nieprzetworzonego tekstu, podobny do C/C++ z #include, więc możesz przesuwać tyle, ile chcesz, aby udostępniać go innym plikom.

Zobacz dokumenty here.

Warto zauważyć, że obecnie dyrektywa include nie działa w szablonach rusztowań widoku ASP.Net.

Jeśli chcesz współdzielić kod ze swoim zwykłym projektem C#, jest to możliwe, ale musisz utworzyć wspólny kod w zespole, do którego możesz się odwoływać. Nie można po prostu użyć dyrektywy <#@ include #>, aby pobrać plik .cs bezpośrednio, ponieważ dyrektywy nie zagnieżdżają się wewnątrz bloków elementów sterujących lub klas.

Można odwoływać się do zespołu pomocniczego zawierającego udostępniony kod, korzystając z dyrektywy <#@ assembly #> udokumentowanej here.

+0

Próbuję '<# @ include file =" test.cs "#>', ale jeśli spróbuję użyć klasy z mojego pliku test.cs, oznacza to, że nie można go znaleźć. – Kyle

+0

Ahh, chcesz włączyć zwykły kod C#, a nie konkretnie fragmenty T4. Poprawię moją odpowiedź. – GarethJ

Powiązane problemy