2009-05-21 14 views
24

मेरे पास एक स्क्रिप्ट है जो एक टेक्स्ट फ़ाइल को संसाधन फ़ाइल में परिवर्तित कर देगी, ताकि अलग-अलग भाषाओं में परिवर्तित विभिन्न भाषाओं के लिए टेक्स्ट फाइलें होकर मैं कई भाषा समर्थन प्राप्त कर सकूं। एक बार जब मैं resx फ़ाइल प्राप्त करने के लिए स्क्रिप्ट चलाता हूं, तो मुझे नई फ़ाइलों का उपयोग करने के लिए Designer.cs फ़ाइलों को बनाने के लिए कस्टम बिल्ड टूल (जैसा कि यहां वर्णित है: Link to Code Project) चलाएं।बिल्ड समय पर एक दृश्य स्टूडियो कस्टम टूल चलाएं

दर्शन के साथ में कि मैं एक ही बटन क्लिक के साथ पूरी परियोजना को बनाने में सक्षम होना चाहिए, मैं उस चरण को कैसे हटा सकता हूं जहां मुझे कोडबिंड फ़ाइलों को बनाने के लिए कस्टम बिल्ड टूल को स्पष्ट रूप से कॉल करना है?

मैंने Designer.cs फ़ाइलों को पूर्व-निर्माण चरण के रूप में स्वचालित रूप से हटाने का प्रयास किया है, क्योंकि मुझे लगता है कि कस्टम बिल्ड उपकरण स्वचालित रूप से चलाएगा यदि कोई Designer.cs फ़ाइलें नहीं थीं, लेकिन कोई पासा नहीं था।

तो, मैं दृश्य स्टूडियो में अपने निर्माण स्क्रिप्ट/MSBuild क्या करना चाहते हैं: 1) कन्वर्ट पाठ resx करने के लिए (किया) 2) उचित निर्देशिका (किया) 3) को resx फ़ाइलों को स्थानांतरित उपयोग करके फ़ाइलें designer.cs बनाने एक कस्टम निर्माण उपकरण (नहीं किया)

ऐसा नहीं है कि अंतिम चरण में है ...

उत्तर

3

दुर्भाग्य से मैं वहाँ ऐसा करने का एक आसान तरीका है नहीं लगता। कस्टम बिल्ड टूल्स केवल VS.NET के भीतर से चलते हैं - जब आप कमांड लाइन से MSBuild का उपयोग करके अपनी प्रोजेक्ट बनाते हैं तो वे नहीं चलते हैं।

सामान्यतः, यदि आपके पास कस्टमर बिल्ड टूल या एमएसबिल्ड टास्क के रूप में बिल्ड टूल लिखने का विकल्प है तो हर बार एमएसबिल्ड टास्क चुनें क्योंकि ये कार्य VS.NET में और कमांड लाइन से चलेंगे।

संसाधनों के लिए designer.cs फ़ाइलें आपके कोडिंग का समर्थन करने के लिए हैं। वे आपको संसाधन फ़ाइल में दृढ़ता से टाइप की गई पहुंच देते हैं। इसलिए, जब तक आप VS.NET में अपनी संस्कृति इनवेरिएंट संसाधन बनाते हैं (और इसे .designer.cs फ़ाइलों को बनाने दें) तो बाद में अतिरिक्त भाषा समर्थन जोड़ना (अतिरिक्त .resx फ़ाइलें) ठीक काम करना चाहिए।

यदि, हालांकि, आपकी टेक्स्ट फ़ाइलें आपकी प्राथमिक संसाधन फ़ाइलें हैं, और आप पहले इन टेक्स्ट फ़ाइलों में नए संसाधन स्ट्रिंग जोड़ रहे हैं, तो आपको .cs फ़ाइलों को उत्पन्न करने का एक और तरीका ढूंढना होगा जो आपको कोड उन संसाधनों के खिलाफ। यदि आप हैं, तो .designer.cs फ़ाइल को स्वयं उत्पन्न करें (या समान रूप से somethign) यह मुश्किल नहीं होगा। कोडडॉम या टी 4 का उपयोग करके आप एक मौजूदा .designer.cs फ़ाइल का उपयोग टेम्पलेट के रूप में करते हुए सहायक वर्ग बना सकते हैं।

0

क्या आपने अपने csproj में पहले/बाद के निर्माण चरण में एक निष्पादन चरण जोड़ने का प्रयास किया है? इसके लिए आपको फ़ाइल को मैन्युअल रूप से संपादित करना होगा, लेकिन इससे आपकी समस्या हल होनी चाहिए।

यदि आप बिल्ड के पहले या बाद में ऐसा करना चाहते हैं तो मैं पूरी तरह से स्पष्ट नहीं हूं। यदि आपको पास 1/पास 2 के बाद कुछ समय की आवश्यकता है, तो आप सीधे लक्ष्य में हुक कर सकते हैं। Microsoft.Build.Common.Targets को देखने का प्रयास करें ताकि यह कैसे किया जा सके।

2

बिल्ड प्रक्रिया के हिस्से के रूप में * .resx के लिए * .esignign.cs उत्पन्न करने का एक तरीका है। एक अंतर्निहित एमएसबिल्ड कार्य GenerateResource है, जो मूल रूप से एसडीके उपकरण resgen.exe के चारों ओर एक रैपर है। Here आप इसका उपयोग कैसे कर सकते हैं इसका एक उदाहरण पा सकते हैं।

उत्पन्न होने पर एक और चीज आपको उपयोगी लगेगी, यदि उत्पन्न * डिज़ाइनर सीएस संस्करण सही नहीं है, मूल रूप से, जेनरेट रिसोर्स कार्य resgen.exe के वांछित संस्करण को कॉल नहीं कर रहा है, संपत्ति SdkToolsPath सेट करने में आपकी मदद हो सकती है।

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