2009-10-28 20 views
5

Tek bir XML dosyasından çok az kod üretiyorum, ancak şablonlar iki farklı T4 şablonunda düzenleniyor. XML dosyasını her değiştirdiğimde, iki *.tt dosyasını açmayı, bunları önemsiz olarak değiştirmeyi (boşluk ekleyip/silme) hatırlamanız ve kodun oluşturulduğundan emin olmak için tekrar kaydetmem gerekiyor.Visual Studio 2008, bir XML dosyası değiştiğinde T4 şablonlarından kodu yeniden oluşturmak için nasıl zorlanır?

Bunu yapmanın doğru yolu bu olamaz!

İdeal olarak, Visual Studio 2008'in XML dosyası değiştiyse T4 dosyalarında bir metin aktarımı yapmasını istiyorum. Visual Studio'nun C# projelerini nasıl oluşturduğunu bilmediğim için biraz kayboldum, bu yüzden bu yönde işaretçiler de yardımcı olacaktır (daha sonra kendimi anlamaya çalışabilirim).

+0

BTW: Sıcak Visual Studio C# projeleri oluşturduğunu anladım: MSBuild. Proje dosyasının kendisi (* .csproj) bir Makefile'ye benzer bir MSBuild dosyasıdır. Yani, XML dosyasını "yapılandırarak" * .tt dosyalarına dokunmak bir çözüm olabilir ... Seni yayınlamaya devam edeceğim. –

cevap

2

T4ScriptFileGenerator öğesini T4Toolbox'dan XML dosyanız için özel bir araç olarak kullanabilirsiniz. Projenizde bu özel araçla Test.XML dosyanız olduğunu varsayalım. Test.XML ilk defa kaydedilir, bu özel araç yeni bir Test.tt dosyası oluşturur. Kod oluşturma mantığınızı buraya yerleştirebilirsiniz (yerinde veya # .t dosyalarınızı ekleyin). Test.XML'yi bir dahaki sefere kaydettiğinizde, mevcut Test.tt dosyasını dönüştürebilir (kod üretir).

2

Sanırım sonunda bir çözüm bulmuş olabilirim. C# projeleri için proje dosyasında XAML dosyalarının nasıl belirtildiğine göz attım.

bize bir dosya A.tt ve C.xml verileri kullanır B.tt varsayalım ve biz ne zaman C.xml değişiklikleri kodunuzu yeniden istiyoruz.

Proje dosyasını düzenleyin. A.tt ve B.tt İçin tanımları şöyle görünmelidir: (... elbette)

<ItemGroup> 
    <None Include="A.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>A.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
    <None Include="B.tt"> 
     <Generator>TextTemplatingFileGenerator</Generator> 
     <LastGenOutput>B.cs</LastGenOutput> 
     <DependentUpon>C.xml</DependentUpon> 
    </None> 
</ItemGroup> 

Ayrıca, ihtiyacınız olacak

<ItemGroup> 
    <None Include="C.xml" /> 
</ItemGroup> 

Ve ayrıca talimat autogenerate için A.cs ve B.cs:

<Compile Include="A.cs"> 
     <DependentUpon>A.tt</DependentUpon> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
</Compile> 
<Compile Include="B.cs"> 
     <DependentUpon>B.tt</DependentUpon> 
     <AutoGen>True</AutoGen> 
     <DesignTime>True</DesignTime> 
</Compile> 

Şablon dosyasını oluşturduğunuzda, bunların çoğunun sizin için zaten yapılacağına inanıyorum. d A.tt ve B.tt için ItemGroup s için <DependentUpon>C.xml</DependentUpon> parçadır.

+1

Bu doğru olsaydı çok mantıklı olurdu. Ne yazık ki değil :(- DependentUpon görünüşe göre sadece proje ağacı görünümünde sunum amaçlı kullanılır. – Ibmurai

+0

@Ibmurai, evet, bunu da buldum ... Sadece kesin bir kanıt yoktu ve yeni başladım. Bunu işaret ettiğim için, –

+0

Bunun işe yaradığını düşünmüyorum. – Slion

İlgili konular