2011-11-17 23 views
8

हमारे पास एक प्रोजेक्ट है जहां .js और .css फ़ाइलों को YUI कंप्रेसर के साथ संपीड़ित किया जाता है। एक बहुत अच्छा उपकरण। हम टीएफएस 2010 का उपयोग बिल्ड सर्वर के रूप में रात के निर्माण के साथ भी करते हैं जो हमारी देव वेबसाइट पर भी तैनात है।वाईयूआई कंप्रेसर और टीएफएस बिल्ड

हमारे पास जो समस्या है, वह यह है कि फ़ाइल यूयूआई उत्पन्न करता है "प्रवेश अस्वीकृत" -प्रोबलेम का कारण बनता है। ऐसा इसलिए है क्योंकि पहले से ही ऐसी फाइल बनाई गई है, और यह प्रोजेक्ट का हिस्सा है, इसे केवल पढ़ने के लिए। हालांकि हम इसे परियोजना से हटा सकते हैं और इसे ठीक बनाना चाहिए। समस्या यह है कि जेनरेट की गई फ़ाइल वास्तविक तैनाती पैकेज में शामिल नहीं होती है।

स्थानीय रूप से मुझे कोई समस्या नहीं है क्योंकि मेरे पास एक पूर्व निर्माण ईवेंट कमांड स्क्रिप्ट है, जो मौजूदा फ़ाइलों को हटा देती है। यह स्पष्ट रूप से बिल्ड सर्वर पर काम नहीं करता है। शायद tfs संदर्भ उपयोगकर्ता को अनुमति की कमी है, मुझे नहीं पता।

क्या कोई ऐसा व्यक्ति है जिसने समान समस्याएं हो सकती हैं?

अद्यतन 21/11: प्रश्न अस्पष्ट हो सकता है। सरल बनाने के लिए सिर्फ इतना कहना देता है मैं इस रूप में यह स्थानीय स्तर पर करता है काम करना चाहता हूँ:

IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)Styles\styles.min.css 
IF NOT $(ConfigurationName) == DEBUG DEL "$(ProjectDir)JavaScript\script.min.js 

इस प्रोजेक्ट के गुण के तहत, पूर्व निर्माण आदेश घटना कतार में परिभाषित किया गया है -> बिल्ड घटनाओं।

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

समाधान:

हम पूर्व निर्माण घटना में निम्न कोड के साथ समाप्त हो गया:

attrib -r "$(ProjectDir)Styles\styles.min.css" 
attrib -r "$(ProjectDir)JavaScript\script.min.js" 
IF NOT $(ConfigurationName) == Debug $(MSBuildBinPath)\msbuild.exe "$(ProjectDir)Config\MSBuild\BuildSettings.xml" 

/मैटिस

+0

मुझे लगता है कि आपका पहला कदम टीएफएस बिल्ड लॉग फ़ाइल को पढ़ना होगा और देखें कि आपका प्री-बिल्ड कार्य चल रहा है या नहीं। उत्पन्न होने वाली फ़ाइल के लिए केवल पढ़ने के लिए ध्वज को बंद करने के लिए प्रीबिल्ड इवेंट स्क्रिप्ट में 'attrib -r' जोड़ने पर विचार करें। –

+0

मुझे अभी भी आपका प्रश्न नहीं समझ रहा है ... क्या आप यह पता लगाने की कोशिश कर रहे हैं कि पूर्व-निर्माण चरण TFS बिल्ड सर्वर पर क्यों नहीं चल रहा है? –

+0

मैं सोच रहा था कि निर्माण के हिस्से के रूप में ऑटो-जनरेटिंग फ़ाइलों की समस्या का समाधान कैसे करें, जब फ़ाइलें पहले से मौजूद हों (और केवल पढ़ने के लिए)। हो सकता है कि हम उन सभी को हटाने के लिए प्री-बिल्ड इवेंट का उपयोग करने की एक ही तकनीक को अपनाएंगे। – GarethOwen

उत्तर

4

फ़ाइलें अपनी परियोजना का हिस्सा हैं और से डाउनलोड टीएफएस रिपोजिटरी, अगर आपको उन पर कोई प्रसंस्करण करने की ज़रूरत है, तो पहले हमेशा पढ़ने के लिए केवल ध्वज को हटा दें, उदाहरण के लिए हटाएं। तो अपनी स्क्रिप्ट में, पहले कार्य करें:

attrib -r *.js 
attrib -r *.css 

उसके बाद उन्हें ठीक हटाने में सक्षम होना चाहिए। यह शायद एक अनुमति मुद्दा नहीं है, क्योंकि फाइल डाउनलोड करने के लिए उपयोग किया जाने वाला खाता भी उन्हें हटाने के लिए उपयोग किया जाता है।

+0

एक आकर्षण की तरह काम किया। धन्यवाद! – Mattias

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^