2010-11-16 16 views
12

मेरे पास एक resx फ़ाइल है और मैं इसे कई समाधान \ परियोजनाओं से उपयोग करना चाहता हूं, और मैं प्रत्येक समाधान पर स्थानीय प्रतिलिपि नहीं लेना चाहता (केवल संकलन समय पर एक प्रतिलिपि लाता हूं)।विभिन्न समाधान कैसे हैं एक resx फ़ाइल का संदर्भ लें?

क्या ऐसा करने का कोई तरीका है? क्योंकि जब मैं इसे "मौजूदा फ़ाइल जोड़ें" के रूप में जोड़ता हूं तो यह मुझे स्थानीय रूप से प्रतिलिपि बनाता है।

कोई विचार यह कैसे करना है?

उत्तर

14

आप एक .resx फ़ाइल का उपयोग कर रहे हैं, तो आप शायद उस दृश्य स्टूडियो .resx फ़ाइलों के लिए प्रदान करता स्वत: जनरेट कोड कार्यक्षमता का लाभ लेना चाहते हैं। यदि आप एकाधिक प्रोजेक्ट्स में .resx फ़ाइल शामिल कर रहे हैं, तो हो सकता है कि आप प्रत्येक प्रोजेक्ट को अपने कोड को स्वतः उत्पन्न कर सकें। आप ऐसा इसलिए कर सकते हैं क्योंकि आप कुछ परियोजनाओं (ResXCodeFileGenerator बनाम GlobalResourceProxyGenerator) के लिए एक अलग कोड जनरेटर का उपयोग करना चाहते हैं या आप केवल जेनरेट कोड के नामस्थान को परियोजना के साथ गठबंधन करना चाहते हैं। यहां बताया गया है कि आप इसे कैसे सेट कर सकते हैं।

मैंने ShareResx नामक सी # कंसोल एप्लिकेशन प्रोजेक्ट के साथ एक नया समाधान स्थापित किया है। मैंने संसाधन नामक समाधान के लिए एक सी # क्लास लाइब्रेरी प्रोजेक्ट भी जोड़ा है, और उस प्रोजेक्ट के भीतर मैंने MySharedResource.resx नामक एक नई संसाधन फ़ाइल जोड़ दी है। विजुअल स्टूडियो स्वचालित रूप से संसाधन संसाधन नाम के अंदर कोड के साथ मेरे संसाधन प्रोजेक्ट के भीतर एक MySharedResource.Designer.cs फ़ाइल बनाता है।

सबसे पहले, अपने मौजूदा .resx फ़ाइल को ShareResx कंसोल एप्लिकेशन प्रोजेक्ट में एक लिंक के रूप में शामिल करें, जैसा कि अन्य उत्तरों का उल्लेख है। मौजूदा आइटम जोड़ें -> ढूंढें .. \ संसाधन \ MySharedResource.resx -> "लिंक के रूप में जोड़ें" का चयन करने के लिए जोड़ें बटन पर ड्रॉप डाउन सूची का उपयोग करें।

अगला, आपको ऑटो-पीढ़ी सेट अप करने के लिए प्रोजेक्ट फ़ाइल को मैन्युअल रूप से संशोधित करना होगा। आप resource.csproj को देख सकते हैं कि कैसे ऑटो-पीढ़ी को ShareResx.csproj में देखना चाहिए इसके लिए मार्गदर्शिका के रूप में सेट अप किया गया है। SharedResx प्रोजेक्ट पर राइट-क्लिक करें और अनलोड प्रोजेक्ट का चयन करें। दोबारा राइट-क्लिक करें और SharedResx.csproj संपादित करें का चयन करें।

<EmbeddedResource Include="..\Resources\MySharedResource.resx"> 
    <Link>MySharedResource.resx</Link> 
</EmbeddedResource> 

इस संशोधित एक जेनरेटर तत्व और एक LastGenOutput तत्व शामिल करने के लिए:

<EmbeddedResource Include="..\Resources\MySharedResource.resx"> 
    <Link>MySharedResource.resx</Link> 
    <Generator>ResXFileCodeGenerator</Generator> 
    <LastGenOutput>SharedResx.MySharedResource.Designer.cs</LastGenOutput> 
</EmbeddedResource> 

नोट: नीचे स्क्रॉल EmbeddedResource तत्व यह है कि अपने लिंक किए गए .resx फ़ाइल से मेल खाती है खोजने के लिए मैनुअल संपादन केवल आवश्यक है अगर आप जेनरेट की गई फाइल के नाम को नियंत्रित करना चाहते हैं जैसा कि मैंने अपने उदाहरण में किया है। अन्यथा, आप विजुअल स्टूडियो में प्रॉपर्टी विंडो में कस्टम टूल सेटिंग का उपयोग कर जनरेटर तत्व निर्दिष्ट कर सकते हैं।

यह भी ध्यान दें कि LastGenOutput तत्व में मैंने जेनरेट की गई फ़ाइल को साझा किए गए फ़ाइल को उपसर्ग के रूप में नामित किया है। यह ResxFileCodeGenerator को .resx फ़ाइल के समान फ़ोल्डर में SharedResx.MySharedResource.Designer.cs नामक फ़ाइल बनाने के लिए कारण देगा। मैंने जेनरेट फ़ाइल को किसी भिन्न फ़ोल्डर में साझा करने के लिए LastGenOutput तत्व में फ़ाइल नाम के बजाय एक सापेक्ष पथ निर्दिष्ट करने के साथ प्रयोग किया है, जैसे कि ShareResx फ़ोल्डर, लेकिन मैंने पाया कि यह लगातार काम नहीं करता है। जबकि मैं पहली बार सही स्थान पर फ़ाइल उत्पन्न करने में सक्षम था, LastGenOutput तत्व ने अपना मान खो दिया ताकि बाद की पीढ़ी उसी स्थान को लक्षित न करें। मैंने उस पर छोड़ दिया और अन्य परियोजनाओं के साथ संभावित संघर्षों से बचने के लिए फ़ाइल नाम के हिस्से के रूप में प्रोजेक्ट नाम उपसर्ग का उपयोग किया।

अब, SharedResx.csproj फ़ाइल को बंद करें और रीलोड प्रोजेक्ट का चयन करने के लिए फिर से राइट-क्लिक करें। SharedResx प्रोजेक्ट में लिंक की गई MySharedResource.resx फ़ाइल पर राइट-क्लिक करें और कस्टम टूल चलाएं चुनें। अब आपको यह देखना चाहिए कि ShareResx.MySharedResource.Designer.cs नामक एक नई लिंक की गई फ़ाइल को MySharedResource.resx फ़ाइल के अंतर्गत एक नेस्टेड फ़ाइल के रूप में प्रोजेक्ट में जोड़ा गया था। इसे देखने के लिए आपको समाधान एक्सप्लोरर विंडो में "सभी फ़ाइलें दिखाएं" विकल्प चालू करना पड़ सकता है।

अब आपके पास अपनी प्रोजेक्ट में शामिल आपकी साझा .resx फ़ाइल से स्वत: जेनरेट की गई एक कोड फ़ाइल है।

+0

डॉ विली के अपरेंटिस: वास्तव में मुझे क्या चाहिए –

+1

LastGenOutput सही काम किया, धन्यवाद! – Fred

2

मैं वास्तव में resx फ़ाइलों के साथ इस प्रयास नहीं किया है, लेकिन आप Adding As Link कोशिश कर सकते हैं।

7

विजुअल स्टूडियो आपको कॉपी करने की बजाय आपको link to files पर भी अनुमति देता है। सुविधा एक सा छिपा हुआ है, लेकिन आप इसे इस तरह से उपयोग कर सकते हैं:

  1. चुनें
  2. फ़ाइल चयन करने के बाद "मौजूदा फ़ाइल जोड़ें", नहीं डबल क्लिक करें बल्कि के बगल में छोटे से ड्रॉप डाउन तीर ध्यान दें है "ओपन" बटन।
  3. ड्रॉपडाउन मेनू से "लिंक फ़ाइल" का चयन करें।
-2

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

+0

यह मुझे स्पष्ट लगता है कि ओपी फाइलों की प्रतिलिपि बनाना नहीं चाहता है। –

0

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

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