2009-10-28 6 views
5

मैं एक एक्सएमएल फ़ाइल से काफी कोड उत्पन्न कर रहा हूं, लेकिन टेम्पलेट दो अलग-अलग टी 4 टेम्पलेट्स में व्यवस्थित हैं। जब भी मैं एक्सएमएल फ़ाइल बदलता हूं, मुझे दो *.tt फाइलों को खोलना याद रखना होगा, उन्हें छोटे से बदल दें (एक जगह जोड़ें/हटाएं) और कोड उत्पन्न होने के लिए उन्हें फिर से सहेजें।जब कोई एक्सएमएल फ़ाइल बदलती है तो टी 4 टेम्पलेट्स से कोड को पुन: उत्पन्न करने के लिए विजुअल स्टूडियो 2008 को कैसे मजबूर किया जाए?

यह करने का सही तरीका नहीं हो सकता है!

आदर्श रूप से, मैं विजुअल स्टूडियो 2008 को टी 4 फाइलों पर टेक्स्ट ट्रांसफॉर्म करना चाहता हूं यदि एक्सएमएल फ़ाइल बदल गई है। मैं थोड़ा हारा हूं क्योंकि मुझे वास्तव में पता नहीं है कि विजुअल स्टूडियो सी # प्रोजेक्ट कैसे बनाता है, इसलिए उस दिशा में पॉइंटर्स भी मददगार होंगे (मैं इसे स्वयं समझने की कोशिश कर सकता हूं)।

+0

बीटीडब्लू: मुझे पता चला कि हॉट विजुअल स्टूडियो सी # परियोजनाओं का निर्माण करता है: एमएसबिल्ड। प्रोजेक्ट फ़ाइल स्वयं (* .csproj) एक एमएसबिल्ड फ़ाइल है, जो मेकफ़ाइल के समान है। इसलिए, XML फ़ाइल को "बिल्डिंग" करते समय * .tt फ़ाइलों को स्पर्श करने का समाधान हो सकता है ... मैं आपको पोस्ट रखूंगा। –

उत्तर

2

आप अपने XML फ़ाइल के लिए कस्टम टूल के रूप में T4Toolbox से T4ScriptFileGenerator का उपयोग कर सकते हैं। आइए मान लें कि आपके पास इस प्रोजेक्ट के साथ आपकी प्रोजेक्ट में Test.XML फ़ाइल है। पहली बार Test.XML सहेजा गया है, यह कस्टम टूल एक नई Test.tt फ़ाइल बनाता है। आप वहां अपना कोड जनरेशन तर्क डाल सकते हैं (जगह पर, या # अपनी अन्य .tt फाइलों को शामिल करें)। अगली बार जब आप Test.XML को सहेज लेंगे तो यह मौजूदा test.tt. से (कोड उत्पन्न) को बदल देगा।

2

मुझे लगता है कि मुझे अंत में एक समाधान मिल सकता है। मुझे यह पता चला कि सी # परियोजनाओं के लिए प्रोजेक्ट फ़ाइल में XAML फ़ाइलों का वर्णन कैसे किया जाता है।

हमें एक फ़ाइल A.tt और B.tt कि C.xml से डेटा का उपयोग मान लेते हैं और हम जब भी C.xml परिवर्तन कोड को पुनर्जीवित करना चाहते हैं।

प्रोजेक्ट फ़ाइल संपादित करें। A.tt और B.tt के लिए आपका परिभाषाओं कुछ इस तरह दिखना चाहिए:

<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> 

इसके अलावा, आप की आवश्यकता होगी (के पाठ्यक्रम ...)

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

और यह भी निर्देश autogenerate को A.cs और 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> 

मुझे विश्वास है कि जब आप टेम्पलेट फ़ाइल बनाते हैं तो इनमें से अधिकतर आपके लिए पहले से ही किया जाएगा, इसलिए आपको वास्तव में विज्ञापन करना होगा डी <DependentUpon>C.xml</DependentUpon>ItemGroup एस A.tt और B.tt के लिए <DependentUpon>C.xml</DependentUpon> भागों हैं।

+1

यदि यह सही था तो यह बहुत समझ में आएगा। अफसोस की बात यह नहीं है :(- DependentUpon स्पष्ट रूप से प्रोजेक्ट ट्री व्यू में प्रेजेंटेशन उद्देश्यों के लिए उपयोग किया जाता है। – Ibmurai

+0

@ इबमुराई, हाँ, मुझे वह भी मिला ... मेरे पास अभी कोई निश्चित सबूत नहीं था और बस चले गए। धन्यवाद इसे इंगित करने के लिए! –

+0

मुझे नहीं लगता कि यह काम करता है। – Slion