तक पहुंचने के लिए प्रतिबिंब बनाम मुझे कुछ बहुत आसान याद आ रहा है, लेकिन से एक एम्बेडेड संसाधन पुनर्प्राप्त करने के लिए प्रतिबिंब का उपयोग करने का क्या फायदा है जिसमें संसाधन है बस इसे एक .resx फ़ाइल के माध्यम से पुनर्प्राप्त कर रहा है? मैं इसे बहुत कुछ देखता हूं लेकिन इसे प्राप्त नहीं करता - क्या resx फ़ाइल Resources.resource
की तुलना में Assembly.GetExecutingAssembly().GetManifestResourceStream(resource)
का उपयोग करने का कोई कारण है? यहां तक कि माइक्रोसॉफ्ट भी करता है: How to embed and access resources।संसाधन फ़ाइल (.resx) बनाम एक एम्बेडेड संसाधन
मेरा क्या मतलब है: मान लें कि मेरे पास एक असेंबली MyAssembly
है जिसमें एक एम्बेडेड संसाधन Config.xml
है।
public string GetConfigXML()
{
Stream xmlStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("MyAssembly.Config.xml");
string xml = GetStringFromStream(xmlStream);
return xml;
}
क्यों GetManifestResourceStream()
जब का उपयोग करें:
public string GetConfigXML() // returns the content of Config.xml as a string
अक्सर, मैं संसाधन पुनः प्राप्त करने के प्रतिबिंब का उपयोग कर इस इस तरह लागू किया देखते हैं,: विधानसभा MyClass
है कि एक विधि है कि एक स्ट्रिंग के रूप कहा संसाधन रिटर्न लागू करता है आप कर सकते हैं:
- दृश्य स्टूडियो में
MyAssembly
परियोजना के लिए संसाधन फ़ाइल (Resource.resx
) जोड़ने; - संसाधन की 'फ़ाइलें' में
Config.xml
जोड़ें; - एक बहुत सरल तरीके से
Config.xml
की सामग्री मिलती है:string xml = Resource.Config;
मैं नहीं जानता कि कैसे दृश्य स्टूडियो .resx आंतरिक रूप से हैंडल फ़ाइलें, लेकिन मैं इसे बस प्रतियां .resx फ़ाइल में संसाधन शक (में जो मामला आप डुप्लिकेट संसाधनों के साथ समाप्त होगा)। मुझे लगता है कि यह आंतरिक रूप से प्रतिबिंब का उपयोग नहीं करता है, तो इस तरह की स्थितियों में बस .resx फ़ाइलों का उपयोग क्यों न करें, जो मेरे लिए अधिक प्रदर्शन-अनुकूल लगता है?
इसे असेंबली के माध्यम से प्राप्त करना * आपके लिए संस्कृति जागरूक उपग्रह असेंबली लोडिंग कर सकता है, जबकि रेक्स लोड करना आपको वर्तमान संस्कृति के लिए सही चुनने की ज़िम्मेदारी के साथ छोड़ देगा। –