2011-01-28 25 views
6

मेरे पास एक WPF एप्लिकेशन है, और मैं AppDomain.AssemblyResolve ईवेंट की सदस्यता लेता हूं (जब भी रनटाइम को असेंबली नहीं मिलती है तो यह घटना बढ़ जाती है), और मुझे लगता है कि यह कई बार कोशिश कर रहा है MyAssembly.resources को हल करने के लिए, जहां MyAssembly वर्तमान निष्पादन असेंबली है। उसने एक ही चीज़ से एक लाइब्रेरी असेंबली के लिए भी पूछा जो मैंने MyAssembly से संदर्भित किया है (यह लाइब्रेरी.resources के लिए कहा गया है)।असेंबली रीसोल्व हमेशा उठाए जाते हैं, MyAssembly.resources

क्या यह सामान्य है? मैं इसे कैसे ठीक करूं? मेरे आवेदन में एक समस्या है। यह पुस्तकालय में स्थित कुछ xaml उपयोगकर्ता नियंत्रण लोड नहीं कर सकता है। क्या यह संबंधित है?

उत्तर

7

इस लाइन को अपने AssemblyInfo.cs में जोड़ें और आपके रिज़ॉल्वर को संसाधनों के लिए और भी नहीं पूछा जाएगा।

[assembly: NeutralResourcesLanguageAttribute("en-US", UltimateResourceFallbackLocation.MainAssembly)] 

हालांकि यह एक कार्य-आसपास है, सावधानीपूर्वक बहु भाषा अनुप्रयोगों पर विचार किया जाना चाहिए।

अधिक जानकारी:

0

आप यह देखने के लिए fuslogvw.exe का उपयोग कर सकते हैं कि नेट आपकी निर्भरताओं को देखने का प्रयास कर रहा है।

अधिक जानकारी के लिए http://msdn.microsoft.com/en-us/library/e74a18c4.aspx देखें।

1

हम एक AssemblyResolve ईवेंट हैंडलर के साथ यह एक ही समस्या में पड़ गए। विचित्र रूप से, हमने केवल विंडोज एक्सपी मशीनों पर इस मुद्दे को देखा। हमारा आवेदन कई भाषाओं में स्थानीयकृत है, इसलिए हम NeutralResourcesLanguageAttribute का उपयोग करने में संकोच नहीं कर रहे थे। हमारे आवेदन नेट v3.5 के लिए संकलित किया गया था, लेकिन अभी भी नेट v4.0 के लिए AssemblyResolve परिवर्तन documented से प्रभावित किया जा रहा था:

महत्वपूर्ण .NET फ्रेमवर्क 4 की शुरुआत के साथ ResolveEventHandler घटना उठाया है सभी असेंबली के लिए, संसाधन असेंबली सहित। पिछले संस्करणों में, घटना संसाधन असेंबली के लिए नहीं उठाई गई थी। यदि ऑपरेटिंग सिस्टम को स्थानीयकृत किया गया है, तो हैंडलर को कई बार कहा जा सकता है: एक बार फॉलबैक श्रृंखला में प्रत्येक संस्कृति के लिए।

जिस तरह से हमने इसे हल किया था, उसे e.Name जांचना था और देखें कि यह * * स्रोतों की खोज कर रहा है। यदि वह फ़ाइल AppDomain या ज्ञात फ़ोल्डर में नहीं मिली थी, तो हम "Resesources" को हटा देंगे और * .dll देखेंगे। अगर वह फ़ाइल मौजूद है, तो हम उस असेंबली को लोड और वापस कर देते हैं। इसने हमारे लिए समस्या का समाधान किया।