7

मैंने अभी आरसी 2 में अपग्रेड किया है और अब काम करने के लिए उपयोग नहीं किया जाता है। मेरे पास एक अलग परियोजना में दो resx फ़ाइलें हैं और मैं डेटा तक पहुंचने के लिए एक कस्टम क्लास का उपयोग करता हूं। अब मुझे यह चलते समय निम्न त्रुटि मिलती है:अलग परियोजना में स्थानीयकरण Asp.net कोर एमवीसी

अनुपलब्धमैंशन संसाधन संसाधन: निर्दिष्ट संस्कृति या तटस्थ संस्कृति के लिए उपयुक्त कोई संसाधन नहीं मिला। सुनिश्चित करें कि "GarageWeb.Core.CoreResources.resources" को संकलित समय पर असेंबली "गैरेजवेब.कोर" में सही ढंग से एम्बेड या लिंक किया गया था, या आवश्यक सभी उपग्रह असेंबली लोड करने योग्य और पूरी तरह से हस्ताक्षरित हैं।

संपादित करें: मैं इस सरलीकृत और एक सांत्वना अनुप्रयोग है कि सब कुछ है, लेकिन यहाँ क्या त्रुटि पुन: पेश करने के लिए आवश्यक है छीन लिया है बनाने के लिए:

public class ResourceService : IResourceService 
{ 
    private readonly ILoggingService _loggingService; 
    private readonly ICoreGlobalResourceService _coreGlobalResources; 
    private readonly ISiteGlobalResourceService _siteGlobalResources; 
    public ResourceService(ILoggingService loggingService, ICoreGlobalResourceService coreGlobalResourceService, ISiteGlobalResourceService siteGlobalResources) 
    { 
     _loggingService = loggingService; 
     _coreGlobalResources = coreGlobalResourceService; 
     _siteGlobalResources = siteGlobalResources; 
    } 
    public string GetGlobalText(string resourceKey, bool includeBrackets = true) 
    { 
     var localizedString = _coreGlobalResources.ResourceManager.GetString(resourceKey); 
     if (string.IsNullOrEmpty(localizedString)) 
     { 
      localizedString = _siteGlobalResources.ResourceManager.GetString(resourceKey); 
     } 
     if (string.IsNullOrEmpty(localizedString) && includeBrackets) 
     { 
      _loggingService.LogInvalidResource(resourceKey); 
     } 

     if (includeBrackets) 
     { 
      return localizedString ?? "[" + resourceKey + "]"; 
     } 
     return localizedString ?? resourceKey; 
    } 

    public string BuildMessageFromResource(string resourceKey, string placeHolderResourceKey1, 
     bool includeBrackets = true) 
    { 
     var errorString = string.Format(CultureInfo.CurrentCulture, GetGlobalText(resourceKey, includeBrackets), 
      GetGlobalText(placeHolderResourceKey1, includeBrackets)); 
     return errorString; 
    } 

    public string BuildMessageFromResourceAndArray(string resourceKey, string[] arrayOfValues, 
     bool includeBrackets = true) 
    { 
     var placeHolderValue = ""; 

     for (var i = 0; i < arrayOfValues.Length; i++) 
     { 
      if (i + 1 == arrayOfValues.Length) 
      { 
       placeHolderValue += GetGlobalText(arrayOfValues[i], includeBrackets); 
      } 
      else 
      { 
       placeHolderValue += GetGlobalText(arrayOfValues[i], includeBrackets) + ", "; 
      } 
     } 

     var errorString = string.Format(CultureInfo.CurrentCulture, GetGlobalText(resourceKey, includeBrackets), 
      placeHolderValue); 
     return errorString; 
    } 

    public string BuildMessageFromResourceAndTwoArrays(string resourceKey, string[] firstArrayOfValues, 
     string[] secondArrayOfValues, 
     bool includeBrackets = true) 
    { 
     var placeHolderOneValue = ""; 
     var placeHolderTwoValue = ""; 

     for (var i = 0; i < firstArrayOfValues.Length; i++) 
     { 
      if (i + 1 == firstArrayOfValues.Length) 
      { 
       placeHolderOneValue += GetGlobalText(firstArrayOfValues[i], includeBrackets); 
      } 
      else 
      { 
       placeHolderOneValue += GetGlobalText(firstArrayOfValues[i], includeBrackets) + ", "; 
      } 
     } 
     for (var i = 0; i < secondArrayOfValues.Length; i++) 
     { 
      if (i + 1 == secondArrayOfValues.Length) 
      { 
       placeHolderTwoValue += GetGlobalText(secondArrayOfValues[i], includeBrackets); 
      } 
      else 
      { 
       placeHolderTwoValue += GetGlobalText(secondArrayOfValues[i], includeBrackets) + ", "; 
      } 
     } 
     var errorString = string.Format(CultureInfo.CurrentCulture, GetGlobalText(resourceKey, includeBrackets), 
      placeHolderOneValue, placeHolderTwoValue); 
     return errorString; 
    } 

    public string BuildMessageFromResource(string resourceKey, string placeHolderResourceKey1, 
     string placeHolderResourceKey2, bool includeBrackets = true) 
    { 
     var errorString = string.Format(CultureInfo.CurrentCulture, GetGlobalText(resourceKey, includeBrackets), 
      GetGlobalText(placeHolderResourceKey1, includeBrackets), 
      GetGlobalText(placeHolderResourceKey2, includeBrackets)); 
     return errorString; 
    } 

    public string BuildMessageFromResource(string resourceKey, string placeHolderResourceKey1, 
     string placeHolderResourceKey2, string placeHolderResourceKey3, 
     bool includeBrackets = true) 
    { 
     var errorString = string.Format(CultureInfo.CurrentCulture, GetGlobalText(resourceKey, includeBrackets), 
      GetGlobalText(placeHolderResourceKey1, includeBrackets), 
      GetGlobalText(placeHolderResourceKey2, includeBrackets), 
      GetGlobalText(placeHolderResourceKey3, includeBrackets)); 
     return errorString; 
    } 
} 

: https://github.com/GarageWeb/ResourceTest

यहाँ वर्ग कि संसाधनों तक पहुँचता है यह यहां विफल रहता है: var localizedString = _coreGlobalResources.ResourceManager.GetString (resourceKey);

कोई विचार? क्या इन संसाधनों को एम्बेड करने का कोई नया तरीका है?

+0

क्या आपने संसाधन फ़ाइलों को एम्बेड किया [जैसा कि यहां बताया गया है] (https://github.com/aspnet/Announcements/issues/175)? – poke

+0

मैंने किया, कोई भाग्य नहीं। – mrfleck

+0

'" बिल्डऑप्शन ": { " एम्बेड करें ": { " includeFiles ": [" संसाधन/CoreResources.resx "," संसाधन/साइट स्रोत।resx "] } } 'यही वह जगह है जहां मैंने फ़ाइलों को एम्बेड किया था। यह संदर्भित प्रोजेक्ट में है। जेसन – mrfleck

उत्तर

6

इसलिए, यदि मैं उप-फ़ोल्डर में बजाय .resx फ़ाइलों को प्रोजेक्ट की रूट पर ले जाता हूं, तो यह अपेक्षा के अनुसार काम करता है। मैंने उप-फ़ोल्डर से एम्बेड करने के हर तरीके से प्रयास किया है और यह अब काम नहीं करता है। अभी के लिए मैं इस कामकाज का उपयोग करूंगा, लेकिन मुझे संदेह है कि यह आरसी 2 में एक बग है।

+0

क्या आपने इसे AspNetCore-Team को बताया है? –

+1

मैंने यहां कोई समस्या जोड़ दी है: https://github.com/aspnet/Localization/issues/245 ऐसा लगता है कि उन्होंने इसे टूलिंग समस्या के रूप में यहां लॉग किया है: https://github.com/aspnet/Tooling/issues/532 – mrfleck

3

जैसा आपने बताया है, मुझे यह भी विश्वास है कि यह एक बग है। मुझे लगता है कि यह बग ऑटो-जेनरेटर डिज़ाइनर टूल में स्थित है। अजीब कारणों से, और आपका कामकाज क्यों काम करता है, टूल मानता है कि आप अपने एप्लिकेशन की जड़ में सभी resx-files डालते हैं।

यहाँ उपकरण के उत्पादन का एक उदाहरण है:

[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 
    public static global::System.Resources.ResourceManager ResourceManager { 
     get { 
      if (object.ReferenceEquals(resourceMan, null)) { 
       global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Cosmos.ViewModels.Default", typeof(Default).GetTypeInfo().Assembly); 
       resourceMan = temp; 
      } 
      return resourceMan; 
     } 
    } 

, कहाँ, Cosmos.ViewModels विधानसभा नाम है, लेकिन .resx फ़ाइलों सब (हमारे वर्तमान समाधान के लिए) Resources.da नाम स्थान में इकट्ठे हुए हैं, Cosmos.ViewModels.Resources.da का पूर्णतः योग्य नामस्थान प्रदान करना।

इस के साथ

मन में, आप फ़ाइलों को जहां इच्छा रख सकते हैं, और उसके बाद Cosmos.ViewModels.Resources.da.Default करने के लिए Cosmos.ViewModels.Default की हार्डकोडेड स्ट्रिंग बदल जाते हैं।

निश्चित रूप से उपकरण के जोखिम के साथ गलती से आपके परिवर्तनों को फिर से हटा दिया गया है।

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

MissingManifestResourceException from included assembly although present #1534

0

मैं MVC कोर 1.1.0 का उपयोग कर रहा है, मैं उप फ़ोल्डर में संसाधन फ़ाइल को जोड़ने के लिए कर रहा हूँ। जब आप उप फ़ोल्डर के बिना संसाधन फ़ाइल के नामस्थान को बदलने का प्रयास करते हैं, तो यह त्रुटि फेंकता है। तो संसाधन फ़ाइल नामस्थान गन्ना जेनरेट होने के समान ही हो।

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