2009-08-18 21 views
15

Mam projekt VS, który zawiera: 1. A Pre-Build akcja z uruchomieniem TextTransform na "template.tt" do generowania "generated.cs" 2. "generowane. cs "wymieniony jako jeden z plików do kompilacji (np. na liście plików projektuTransformacja T4 i kolejność kompilacji w Visual Studio

Kiedy buduję projekt, czynność przed budową jest wykonywana," generated.cs "jest ponownie tworzone, ale VS kompiluje poprzednie jego wersja (którą domyślam się załadować do pamięci na początku procesu kompilacji).

Co można zrobić, aby kompilacja korzystała z nowo wygenerowanego pliku cs (który jest generowany w działaniu pre-build?

(zauważ, że w mojej sytuacji wejście transformacja tekst jest dynamiczna stąd nie mogą być wykonane w czasie projektowania)

Dzięki.

Odpowiedz

4

Nie potrzebuję niestandardowej czynności poprzedzającej kompilację. Po prostu dodaj plik ".tt" do swojego projektu i ustaw jego właściwość "Własne narzędzie" na "TextTemplatingFileGenerator". Możesz chcieć upewnić się, że pliki * .generated.cs również zostaną dodane do projektu, ale myślę, że VS się tym zajmie.

+6

To nie wydaje się działać dla mnie. Sądzę, że Zvika mówił, że chcą, aby szablon T4 działał magicznie za każdym razem, gdy jego projekt zostanie zbudowany. Tego też chcę. Chociaż używam T4MVC z ASP.NET MVC 3. Na przykład, jeśli biorę projekt, który buduje, dodaj nowy plik, który powinien zostać pobrany przez T4MVC, a następnie ponownie zbuduj projekt, nie widzę zmiana, która powinna zostać wykonana przez T4MVC. Muszę jawnie uruchomić aktualizację, klikając prawym przyciskiem myszy plik .tt i wybierając polecenie Uruchom narzędzie niestandardowe. –

+0

spowoduje to wygenerowanie wyjścia tylko po zapisaniu pliku '.tt'. –

3

Istnieje teraz rozwiązanie tego problemu! Oleg Sych ma post na swoim blogu, w którym szczegółowo opisuje, w jaki sposób wykonać pracę przekształcania w czasie rzeczywistym.

Oto źródło: https://web.archive.org/web/20140116193428/http://www.olegsych.com/2010/04/understanding-t4-msbuild-integration/

Zasadniczo, po prostu to gromadzeniu cele T4 w pliku projektu i ustawić właściwość TransformOnBuild true.

Oto odnośny fragment:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
    <PropertyGroup> 
    <TransformOnBuild>true</TransformOnBuild> 
    </PropertyGroup> 
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" /> 

Uwaga że Microsoft.TextTemplating.targets plik musi być włączone po Microsoft.CSharp.targets.

+0

Generuje pliki, ale pomija ich względny obszar nazw. jak mogę to przezwyciężyć? –

Powiązane problemy