2009-10-21 10 views
6

में एक्सएसएलटी के साथ काम करना मेरे सी # क्लाइंट एप्लिकेशन में, मैं XML को HTML में बदलने के लिए एक्सएसएलटी का उपयोग करता हूं।विजुअल स्टूडियो

मैं पूरे समाधान को पुन: संकलित किए बिना इन फ़ाइलों को जगह में संपादित करने में सक्षम होना चाहता हूं। मुझे यह देखने में परेशानी हो रही है कि इसे देखने के लिए विजुअल स्टूडियो 2008 कैसे सेट करें।

समस्या यह है कि XSLT फ़ाइलों को किसी भी तरह आउटपुट निर्देशिका में कॉपी किया जाना चाहिए। वर्तमान में यह निर्माण प्रक्रिया के दौरान होता है। (मेरी एक्सएसएलटी फाइलें "अगर नई हो तो कॉपी करें" पर सेट की गई हैं।) निर्माण प्रक्रिया में कुछ मिनट लग सकते हैं, जो एचटीएमएल में छोटे बदलाव करने के लिए अत्यधिक लगता है।

I आउटपुट निर्देशिका में अपने एक्सएसएलटी संपादन को स्वयं बना सकता है, लेकिन आउटपुट निर्देशिका स्रोत नियंत्रण में नहीं है। मैंने अपने समाधान के निर्माण से कई बार अपने त्वरित संपादन को गलती से मिटा दिया है।

मैं एक्सएसएलटी डीबग करने के लिए चक्र समय को कम करना चाहता हूं, जबकि मेरी एक्सएसएलटी फाइलों को स्रोत नियंत्रण में रखते हुए और आकस्मिक ओवरराइट्स को रोकना।

प्रतिक्रियाओं का सारांश: ऐसा लगता है कि इस समस्या को हल करने के लिए सबसे व्यावहारिक दृष्टिकोण - यह देखते हुए कि विजुअल स्टूडियो के पास बॉक्स से बाहर करने का कोई अच्छा तरीका नहीं है - एक अलग परियोजना बनाना है सामग्री फाइलें शामिल हैं। प्रोजेक्ट बनने पर इन फ़ाइलों को आउटपुट स्थान पर कॉपी किया जाता है। इस तरह मुझे पूरे समाधान को संकलित करने की आवश्यकता नहीं है, बस एक्सएसएलटी, सीएसएस, इमेज इत्यादि जैसी सभी स्थिर जानकारी वाले एक प्रोजेक्ट

कई लोगों को सिंक या बैच कॉपी टूल का उपयोग करने का सुझाव दिया गया है, लेकिन यह काम करेगा मेरे लिए व्यक्तिगत रूप से, टीम के अन्य सदस्यों के लिए इसे स्थापित करना भी बहुत अधिक काम होगा।

+0

आपका पहला पैराग्राफ समझ में नहीं आता है। मुझे लगता है कि आप XSLT फ़ाइलों में उनके मूल स्थान _without_ में आउटपुट निर्देशिका में उन्हें प्राप्त करने के लिए समाधान को पुन: संकलित करने के लिए परिवर्तन करना चाहते हैं। – Oded

+0

हां @ ओडेड, यही मेरा मतलब था। मैंने अपना प्रश्न संपादित कर लिया है। उम्मीद है कि अब यह स्पष्ट है। – dthrasher

उत्तर

4

मैं आपके प्रश्न के बारे में पूरी तरह से स्पष्ट नहीं हूं, लेकिन आप विजुअल स्टूडियो को आपके द्वारा बनाए जाने पर आउटपुट फ़ोल्डर में समाधान से फ़ाइल की प्रतिलिपि बनाने के लिए निर्देश दे सकते हैं।

मुझे अपने परिदृश्य समझने की कोशिश करें:

  • आप अपने सी # कोड के साथ स्रोत नियंत्रण में जाँच की XSLT फ़ाइलों की है। उदाहरण के लिए, यदि आपकी प्रोजेक्ट माईप्रोज नामक फ़ोल्डर में है, तो XSLT फ़ाइलें MyProj/Templates
  • में रहती हैं आप टेम्पलेट फ़ोल्डर में xslt फ़ाइलों को संपादित करने में सक्षम होना चाहते हैं और उन परिवर्तनों को स्रोत नियंत्रण में सबमिट करना चाहते हैं जैसे आप करते हैं आपकी परियोजना में .cs या अन्य फ़ाइलों के साथ।
  • आप अपने एक्स्प्लेबल के साथ बिन/डीबग या बिन/रिलीज फ़ोल्डर में अपनी xslt फ़ाइलों की प्रतिलिपि चाहते हैं।

यदि ऐसा है, तो अपने विजुअल स्टूडियो प्रोजेक्ट में एक्सएसएलटी फाइलें जोड़ें। फिर उन पर राइट क्लिक करें, प्रॉपर्टी खोलें, और "बिल्ड एक्शन" = "कंटेंट" और "आउटपुट निर्देशिका में कॉपी करें" = "हमेशा" सेट करें। जब भी आप अपनी परियोजना का निर्माण करते हैं, तो एक्सएसएलटी फाइलों की नवीनतम प्रति आपके बिन/डीबग या बिन/रिलीज निर्देशिका में रखी जाएगी।

+0

यह बिल्कुल मेरा परिदृश्य है। मैं अपने समाधान में प्रत्येक एकल XSLT फ़ाइल के लिए बिल्ड एक्शन और कॉपी आउटपुट निर्देशिका गुणों को कॉपी करने से बचने के लिए एक तरीका ढूंढने की उम्मीद कर रहा था। हर बार जब मैं एक्सएसएलटी फ़ाइल में मामूली परिवर्तन करता हूं तो पूरे समाधान को पुनर्निर्माण करना भी कठिन होता है। – dthrasher

+0

आप एक अलग परियोजना बना सकते हैं जिसमें सभी एक्सएसएलटी फाइलें और आउटपुट आपके सी # प्रोजेक्ट के समान स्थान पर हैं। तो आपको बस एक परियोजना को पुनर्निर्माण करना है। यदि आप "आउटपुट निर्देशिका में कॉपी करें" सेट करते हैं = "अगर नई हो तो कॉपी करें" तो यह बहुत तेज़ होगा। इसके अलावा, अगर आप सभी .xslt फ़ाइलों की प्रतिलिपि करने के लिए अपने XSLT परियोजना पर एक के बाद निर्माण कार्य के लिए आपको उन्हें अलग से कॉन्फ़िगर करने के लिए की जरूरत नहीं है: प्रति $ (ProjectDir)/* xslt $ (OutDir) – Anton

+0

। एक्सएसएलटी फाइलों पर पोस्ट बिल्ड एक्शन का उपयोग करना चालाक है। यह मुझे विन्यास काम का एक अच्छा सा बचाएगा। और एक्सएसएलटी के लिए एक अलग परियोजना बनाने से चक्र के समय में काफी कमी आएगी। मैं इसे आज़मा दूंगा। – dthrasher

1

आप सीधे आउटपुट फ़ोल्डर में फ़ाइल को संपादित कर सकते हैं।

एक और नोट पर, बहुत से लोगों को यह नहीं पता कि अमीर उपकरण VS में डिस्गिंग xslts को अनुमति देने के लिए बनाए गए हैं।

http://msdn.microsoft.com/en-us/library/ms255605(VS.80).aspx

+0

आउटपुट फ़ोल्डर में फ़ाइल को संपादित करने में समस्या को समाप्त होने पर समाधान के अंदर संस्करण को अद्यतन करना याद रखना है। समाधान के अंदर संस्करण स्रोत नियंत्रण में एक है। – dthrasher

+0

यह एक हैक का थोड़ा सा है लेकिन आपने उस फ़ाइल को प्रोजेक्ट में रखा है। क्या आप फाइल को रिश्तेदार पथ से उठा सकते हैं? .. \ .. \ folder \ file.xslt? – tzerb

+0

एक सापेक्ष पथ काम नहीं करेगा, क्योंकि फाइल पेड़ में विभिन्न स्तरों पर हैं। और जब आप समाधान को साफ या पुनर्निर्माण करते हैं तो परियोजना में आउटपुट निर्देशिका में एक्सएसएलटी फ़ाइल सहित समस्याएं होती हैं। अच्छे विचार, यद्यपि। – dthrasher

2

एक दृष्टिकोण जब डिबग मोड में समाधान निर्देशिका के लिए मेरे XSLT लोड समारोह बात करने के लिए एक C# Preprocessor Directive शामिल करने के लिए है, लेकिन उत्पादन निर्देशिका जब एक रिलीज निर्माण कर रही है।

कुछ की तरह:

string viewFolder = AppDomain.CurrentDomain.BaseDirectory; 

#if DEBUG 
// Move up from /bin/debug 
viewFolder = viewFolder + @"..\..\"; 
#endif 

लेकिन यह एक हैक की तरह लगता है।

1

एक समाधान जो आपके लिए काम कर सकता है वह आपके junction को अपने आउटपुट फ़ोल्डर में Templates पर सेट करना है। यह आपको आउटपुट फ़ोल्डर में कॉपी किए बिना सीधे एक्सएसएलटी का उपयोग करने की अनुमति देगा। एक अच्छा विचार है कि निर्माण कार्य के रूप में जंक्शन को सुनिश्चित करना (बनाना)।

आवश्यक:

  • NTFS
  • एक उपकरण जंक्शनों बनाने के लिए (जैसे junction)
+0

यह काम कर सकता है, लेकिन मैं किसी भी प्रतीकात्मक लिंक जादू एनटीएफएस वूडू से बचना चाहता हूं। यहां तक ​​कि यदि मैं समझता हूं कि इसे कैसे सेट अप किया जाए, तो बाकी टीम को यह करने के लिए कहें ... – dthrasher

+0

जंक्शन शायद ही जादू हैं और पूर्व या पोस्ट बिल्ड क्रियाओं का उपयोग करके स्वचालित रूप से बनाया जा सकता है। यह जानकर खेद है कि वे आपकी टीम के लिए बहुत जटिल हैं। –

0

आप एक फ़ाइल तुल्यकालन प्रोग्राम का उपयोग कर सकते हैं (उदाहरण के लिए माइक्रोसॉफ्ट SyncToy "एक नि: शुल्क आवेदन फ़ाइलें सिंक्रनाइज़ करता है और फ़ाइलों के प्रति फ़ोल्डर्स ") फाइलों की प्रतिलिपि बनाने के लिए? यह आपको "बिल्ड पर प्रतिलिपि" चरण से बचने की अनुमति देगा क्योंकि फ़ाइलों को सहेजे जाने के बाद स्वचालित रूप से कॉपी किया जाता है। साथ ही, यदि आप उन्हें आउटपुट निर्देशिका में संपादित करते हैं, तो परिवर्तनों को आपकी स्रोत नियंत्रित निर्देशिका में वापस कॉपी किया जा सकता है। इस परिदृश्य के लिए सबसे अच्छा वास्तविक समय सिंक प्रोग्राम नहीं है, लेकिन यह एक और सवाल हो सकता है।

1
  1. एक बैच फ़ाइल है कि प्रतियां अपने xslt अपने सभी बिन निर्देशिका (बिन/डिबग bin/रिहाई या जो कुछ भी हैं जिन्हें आप परिभाषित किया है)
  2. एक External Tool के रूप में बैच फ़ाइल जोड़ें अपने स्रोत नियंत्रित स्थान से की बनाएँ, वैकल्पिक रूप से बैच फ़ाइल को निष्पादित करने के लिए एक कीस्ट्रोक (या तार) असाइन करना
  3. संपादित करें, उपकरण चलाएं (मैं इसे आसान बनाने के लिए इसे एक कीस्ट्रोक असाइन करूंगा), फिर अपना वेबपृष्ठ देखें।
2

स्पष्ट रूप से आप एक परियोजना में दो चिंताओं का प्रबंधन कर रहे हैं। पहली चिंता आपका व्यवसाय तर्क है (एक एक्सएसएलटी ट्रांसफॉर्म को तत्काल बनाना, इसे कुछ एक्सएमएल सामग्री को बदलने, एचटीएमएल परिणाम को आउटपुट करने के लिए बुला रहा है ....)। दूसरी चिंता ट्रांसफॉर्मेशन ही है।

तो क्यों अपने xslt चादरों के लिए एक अलग परियोजना नहीं बनाते? इस परियोजना में "बिल्डिंग" में शीट को आउटपुट फ़ोल्डर में कॉपी करना होगा। Xslt बदलना अन्य प्रोजेक्ट को प्रभावित नहीं करेगा, इसलिए बिल्ड समय को कम करें।

परियोजना स्तर पर चिंताएं का पृथक्करण, वह यह है कि :)

+0

आप चिंताओं को अलग करने के बारे में एक अच्छा मुद्दा बनाते हैं। एक अलग परियोजना का उपयोग करने के बारे में आपका सुझाव अनिवार्य रूप से वही सिफारिश है जो @antonmarkov बनाया गया है। मुझे लगता है कि यह शायद सबसे सुरक्षित मार्ग है। – dthrasher

0

मैं बिल्कुल वैसा ही मुद्दा है। मैंने वाइसवर्स (http://www.tgrmn.com/) नामक एक प्रोग्राम खरीदा है जिसमें मैंने सिंक प्रोफाइल सेट अप किया है ताकि मेरे सीएसएस, लेआउट और एक्सएसएलटी फ़ोल्डरों को मेरी मशीन से मेरे देव सर्वर में सिंक किया जा सके जैसे ही कोई भी बदलाव किया जाता है। अगर मैं कोई कोड बदलता हूं तो मैं सिर्फ सामान्य के रूप में प्रकाशित करता हूं।

0

मुझे समझ में आता है कि यह एक पुरानी पोस्ट है लेकिन मुझे मूल रूप से एक ही समस्या का एक अलग समाधान मिला।

विजुअल स्टूडियो आपको फ़ाइलों को 'लिंक' करने की अनुमति देता है।

उस समाधान में फ़ोल्डर पर राइट क्लिक करें जहां आप फ़ाइल लिंक स्थित होना चाहते हैं।

क्लिक करें

'जोड़ें'

'मौजूदा मद ..'

(फ़ाइल का चयन करें)

जाओ ड्रॉप डाउन 'जोड़ें' और

'लिंक के रूप में' का चयन
संबंधित मुद्दे