2012-05-29 17 views
9

समस्या का सामना करना पड़ रहा हूँ के रूप में निम्नानुसार है:ResourceMap त्रुटि नहीं मिला

मैं एक सेवा कनेक्शन संपुटित करने के लिए एक पोर्टेबल वर्ग पुस्तकालय विकसित किया है। इस कक्षा पुस्तकालय के अंदर एक संसाधन.resw फ़ाइल है जिसमें तार हैं। इन तारों को केवल कक्षा पुस्तकालय के तरीकों से बुलाया जाता है (उदाहरण के लिए ToString() विधियों को ओवरराइड करने के लिए)।

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

 ClientFacadeConnector connector = new ClientFacadeConnector(); 
     ICollection<SearchResult> results = null; 
     string message = string.Empty; 

     if (maxResults != -1) //Search with max Results 
     { 
      try 
      { 
       if (!contextQuery.Trim().Equals(string.Empty)) 
       { 

        results = await connector.GetConnected().SearchAsync(contextQuery, query, maxResults); 
        message = "Search with ContextQuery " + contextQuery + ", Query " + query + ", max results " + maxResults.ToString(); 
       } 
       else 
       { 

        results = await connector.GetConnected().SearchAsync(query, maxResults, true); 
        message = "...using normal Query search, Query " + query + ", max results " + maxResults.ToString(); 
       } 
      } 
      catch (IQserException ex) 
      { 
       message = ex.Message; 
      } 
     } 


     if (results != null) 
     { 
      ICollection<LocalSearchResult> contentResults = new List<LocalSearchResult>(); 
      foreach (SearchResult s in results) 
      { 
       var q = s.ToString(); 
       var contentItem = await connector.GetConnected().GetContentAsync(s.ContentId); 
       LocalSearchResult lContent = new LocalSearchResult(contentItem); 
       lContent.Score = s.Score; 
       lContent.Relevance = s.Relevance; 
       lContent.MarkFullText(query); 
       contentResults.Add(lContent); 
      } 

बिंदु जहाँ मैं फोन s.ToString() विधि, मैं कोई त्रुटि मिलती है "संसाधन मानचित्र नहीं मिला" पर।

व्याख्या करने के लिए जहां इस से आता है:

public override string ToString() 
    { 
     StringBuilder buf = new StringBuilder(AppResources.GetResources("InstrSearchResultContent")); 

     if (ContentId != -1) 
     { 
      buf.Append(AppResources.GetResources("StringContent") + " ID:" + ContentId.ToString() + " | "); 
     } 
     else 
     { 
      buf.Append(AppResources.GetResources("StringNo") + AppResources.GetResources("StringContent") + "ID" + " | "); 
     } 
     ... 

संसाधन फ़ाइल resources.resw कहा जाता है और किया जाता है:

public static class AppResources 
{ 
    private static ResourceLoader resourceLoader; 

    static AppResources() 
    { 
     // Load local file Resources.resw by default 
     resourceLoader = new ResourceLoader();    
    } 

    public static string GetResources(string key) 
    { 
     if (string.IsNullOrEmpty(key)) 
      throw new ArgumentNullException("key"); 

     return resourceLoader.GetString(key); 
    } 

} 

और विधि ओवरराइड toString() के अंदर वहाँ कोड है कि इस प्रकार दिखता है डिफ़ॉल्ट resw फ़ाइल है जो संसाधन लोडर कॉल करता है अगर कोई अन्य नहीं कहा जाता है।

आश्चर्यजनक रूप से पर्याप्त है, अगर मैं स्थानीय रूप से क्लाइंट एप्लिकेशन के अंदर संसाधन फ़ाइल की प्रतिलिपि बनाता हूं, तो क्लास लाइब्रेरी संसाधन फ़ाइल और सब कुछ काम करने के लिए सभी कॉलों द्वारा इसे सही ढंग से संदर्भित किया जाता है।

इस कक्षा पुस्तकालय को समाप्त होने पर एक एसडीके माना जाता है। क्या मुझे संसाधन फ़ाइल को अलग से वितरित करने की आवश्यकता है?

ऐसी समस्या मैंने कभी सामान्य कक्षा पुस्तकालयों और resx फ़ाइलों के साथ अनुभव नहीं किया है। Resw मुझे क्रिप्स दे रहा है ..

उत्तर

2

@Rory MacLeod द्वारा पोस्ट किया गया स्वीकृत उत्तर अब सत्य नहीं हो सकता है। मैंने कोशिश की और वीएस ने चेतावनी दी कि ResourceLoader(String) बहिष्कृत है।मेरे मामले में काम किया है:

var loader = ResourceLoader.GetForCurrentView(); 
string localName = loader.GetString("someKey"); 
+2

अभी भी वही त्रुटि प्राप्त कर रहा है। क्या हमें इससे पहले कुछ शुरू करने की ज़रूरत है? – hellodear

+0

मुझे नहीं लगता कि यह बहिष्कृत है। मुझे अब 2017 में ऐसा कोई संदेश नहीं मिला है। यदि आप स्ट्रिंग्स डिफ़ॉल्ट पथ से अलग पथ का उपयोग करते हैं तो स्ट्रिंग पैरामीटर का उपयोग किया जाता है, मुझे लगता है कि – batmaci

+0

** संसाधन लोडर.गेटफॉरकंटेंट व्यू() ** के साथ मुझे एक ही त्रुटि मिल रही है ("संसाधन मानचित्र नहीं मिला")। ** नया संसाधन लोडर ("असेंबली/रिसोर्सफाइल") ** समाधान काम कर रहा है, लेकिन एक बहिष्करण चेतावनी के साथ। – jannikb

4

मेरे पास एक समान समस्या थी जिसे मैंने गुणों में PRIResource में resw फ़ाइल के बिल्ड एक्शन को बदलकर हल किया था। मैंने पुनर्स्थापित करने के लिए मौजूदा रेक्स का नाम बदल दिया था लेकिन दस्तावेज़ीकरण का उल्लेख नहीं है कि आपको बिल्ड एक्शन को भी बदलना होगा।

12

ऐसा लगता है कि जब आप ResourceLoader बनाने के लिए, इस तरह संसाधन मानचित्र का नाम निर्दिष्ट करने के लिए है:

resourceLoader = new ResourceLoader("Assembly/ResourceFile"); 

उदाहरण के लिए, यदि आपका वर्ग पुस्तकालय बुलाया गया था "Company.Lib.dll", और अपने संसाधन फ़ाइल था "Resources.resw", आप का प्रयोग करेंगे:

resourceLoader = new ResourceLoader("Company.Lib/Resources"); 

यह MSDN पर पूरी तरह से प्रलेखित किया जाना प्रतीत होता है नहीं है - यह पता चलता है कि तुम सिर्फ अपने संसाधन फ़ाइल का नाम निर्दिष्ट कर सकते हैं, लेकिन यह हो सकता है कि वह केवल विंडो में संसाधन फ़ाइलों के लिए काम करता है एस स्टोर आवेदन परियोजना। It was this page जो मुझे दिखाता है कि, पुस्तकालयों के लिए, आपको असेंबली नाम भी निर्दिष्ट करना होगा।

+0

यह मैं बाहर की मदद की:

मेरे समाधान जो एक चेतावनी नहीं देता है यह है! +1 – borrrden

+0

ने मुझे बहुत मदद की, धन्यवाद +1 – katho2404

7

मुझे How to load string resources से सभी चरणों को दोहराने के साथ भी इसी तरह की समस्या थी। समस्या यह थी कि मेरी Resources.resw फ़ाइल खाली थी। जब मैंने इसमें कुछ नकली स्ट्रिंग जोड़ा तो सभी ने उम्मीद के अनुसार काम करना शुरू कर दिया।

0

मैं ने वही समस्या का सामना करना पड़ा जब एक वर्ग पुस्तकालय के साथ एक UWP एप्लिकेशन का विकास। तो मेरे पास मेरी लाइब्रेरी में एक /Strings/en-Us/Resource.resw फ़ाइल है।

ResourceLoader.GetForCurrentView().GetString("someKey"); 

एक अपवाद

new ResourceLoader("Company.Lib/Resources").GetString("someKey"); 

मुझे एक प्रतिवाद चेतावनी देता है, लेकिन काम करता है देता है।

ResourceLoader.GetForViewIndependentUse("AssemblyNamespace/Resources").GetString("someKey");