2013-02-05 14 views
10

जब मैं 'एम्बेडेड संसाधन' के रूप में फ़ाइल बनाता हूं, तो विजुअल स्टूडियो इसे परियोजना में अपने पथ के आधार पर असेंबली में एक नाम देता है। उदाहरण के लिए। cases/2013.1/colours.xml पर मेरी फ़ाइल को स्पोरैडिक अंडरस्कोर के साथ संसाधन नाम दिया गया है जैसे cases._2013._1.colours.xml.NET मेरे एम्बेडेड संसाधनों का नाम बदल रहा है?

मेरा सवाल है - यह नाम कैसे निर्धारित किया जाता है? क्या नियम दस्तावेज हैं? विजुअल स्टूडियो का उपयोग करने वाली विधि कहां है?

संपादित करें: मैं पूछता हूं क्योंकि मैं इन चीजों की एक बड़ी संख्या के साथ काम कर रहा हूं और यह फ़ाइल पथ से संसाधन नाम को कम करने में सक्षम होना उपयोगी होगा।

+2

_ का उपयोग किया जाता है क्योंकि एक पहचानकर्ता अंकों से शुरू नहीं कर सकता (कम से कम # में)। – leppie

+3

[संबंधित] (http://stackoverflow.com/q/3605514/21567), तो आप नाम को अपनी पसंद में बदल सकते हैं। –

+0

यह भी देखें http://stackoverflow.com/a/10714391/1354426 – Stipo

उत्तर

13

MSDN लाइब्रेरी लेख द्वारा प्रलेखित के रूप में, Resgen.exe StronglyTypedResourceBuilder.VerifyResourceName() method द्वारा कार्यान्वित नियमों का उपयोग करता है। मैं बस कॉपी करूंगा कि एमएसडीएन लाइब्रेरी क्या कहती है:

यदि कुंजी पैरामीटर एक खाली स्ट्रिंग ("") है, तो एक स्ट्रिंग जिसमें एक अंडरस्कोर वर्ण (_) होता है। यदि कुंजी पैरामीटर खाली स्ट्रिंग नहीं है, तो VerifyResourceName विधि स्ट्रिंग में प्रत्येक वर्ण को प्रदाता पैरामीटर द्वारा निर्दिष्ट भाषा के आधार पर अमान्य टोकन के सेट पर तुलना करता है। स्ट्रिंग में कोई भी अमान्य वर्ण अंडरस्कोर वर्ण के साथ बदल दिया गया है। अक्षर हैं जो एक अंडरस्कोर से बदल दिया जाएगा इस प्रकार हैं:।

'' (अंतरिक्ष), U + 00A0 (नॉन-ब्रेकिंग स्पेस), '' (अवधि), ',' (अल्पविराम), ';' (अर्धविराम), '|', '~', '@', '#', '%', '^', '&', '*', '+', '-', '/', '\ ',' < ','> ','? ',' [','] ',' (',') ',' {','} ',' '' (उद्धरण), '' '(एस्ट्रोफ़े), ':' '!'।।, और

नोट
जोरदार टाइप संसाधनों हालांकि संसाधन प्रमुख नामों के रूप में के लिए, और इतने पर) भाषा खोजशब्दों का उपयोग करते हैं (जैसे, की अनुमति नहीं है, System.CodeDom डिज़ाइन पैटर्न अंडरस्कोर वर्ण के साथ कीवर्ड लगाकर द्वारा भाषा खोजशब्दों का उपयोग की अनुमति देता है। VerifyResourceName प्रणाली को बुलाती है इस डिजाइन को लागू करने के CreateValidIdentifier विधि। उदाहरण के लिए, यदि आप एक संसाधन नाम है कि एक भाषा कीवर्ड के समान है का उपयोग , जैसे, नाम उत्पन्न दृढ़ता से टाइप संसाधन संसाधन वर्ग में _for के रूप में प्रकट होता है।

StronglyTypedResourceBuilder क्लास के स्रोत कोड को देखते हुए, दस्तावेज़ीकरण सटीक है।

+0

बढ़िया! मुझे दूसरे पैरामीटर के लिए क्या रखा जाना चाहिए? –

+1

एक CodeDomProvider, बस एमएसडीएन लाइब्रेरी लिंक के माध्यम से क्लिक करें। जब आप अपना प्रश्न टैग करते हैं तो आप CSharpCodeProvider का उपयोग करेंगे [सी #]। इस तरह विधि में किसी भाषा में कीवर्ड के बारे में पता चलता है, नोट नोट में समझाया गया है। –

+2

दिलचस्प रूप से मुझे अपने असेंबली में नाम से अलग परिणाम मिलते हैं जब मैं StronglyTypedResourceBuilder.VerifyResourceName को मैन्युअल रूप से कॉल करता हूं। उदाहरण के लिए bundle.config bundle_config बन जाता है लेकिन असेंबली में नाम bundle.config –

1

मुझे किसी भी दस्तावेज के बारे में पता नहीं है कि विजुअल स्टूडियो स्वयं नाम कैसे उत्पन्न करता है, लेकिन मैं आमतौर पर मानता हूं कि यह स्टैंडअलोन बिल्ड के लिए resgen.exe द्वारा उपयोग किए गए एल्गोरिदम के साथ संगत है, जिसे here दस्तावेज किया गया है। हालांकि, एल्गोरिथ्म वर्णित अपने उदाहरण के लिए काम नहीं करता है (जब तक कि मैं इसे बदल रहा हूँ, यह cases._013._.colours के एक वर्ग के नाम का उत्पादन होता है), तो या तो वी.एस. इसे गलत तरीके से लागू करता है, या resgen प्रलेखन विशिष्ट मामले आपके द्वारा बताई से गलत है।

0

सरल नियमों है कि आप अपने उदाहरण हैं करने के लिए आवेदन कर सकते हैं ...

cases/2013.1/colours.xml 

1) की जगह "/" के साथ "।"

cases.2013.1.colours.xml 

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

cases => cases 
2013 => _2013 
1 => _1 
colours => colours 
xml => xml 

3) एक डॉट के साथ सीमित स्ट्रिंग को फिर से इकट्ठा करें।

cases._2013._1.colours.xml 
+0

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

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