Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры

Я создал сборку и позже переименовал ее.

Затем я начал получать ошибки во время выполнения при вызове:

toolsMenuName = resourceManager.GetString(resourceName);

Переменная resourceName "enTools" во время выполнения.

Не удалось найти ресурсы подходящий для указанной культуры или нейтральной культурой. Убедиться "Jfc.TFSAddIn.CommandBar.resources" был правильно встроен или связан с сборка "Jfc.TFSAddIn" при компиляции времени или что весь спутник необходимые сборки являются загружаемыми и полностью подписан.

Код:

string resourceName;
ResourceManager resourceManager = new ResourceManager("Jfc.TFSAddIn.CommandBar", Assembly.GetExecutingAssembly());

CultureInfo cultureInfo = new CultureInfo(_applicationObject.LocaleID);

if(cultureInfo.TwoLetterISOLanguageName == "zh")
{
     CultureInfo parentCultureInfo = cultureInfo.Parent;
     resourceName = String.Concat(parentCultureInfo.Name, "Tools");
}
else
{
     resourceName = String.Concat(cultureInfo.TwoLetterISOLanguageName, "Tools");
}

toolsMenuName = resourceManager.GetString(resourceName); // EXCEPTION IS HERE

Я вижу файл CommandBar.resx, включенный в проект, я могу открыть его и увидеть там строку "enTools". Кажется, что либо ресурсы не включены в сборку, либо ресурсы включены, но .NET не может разрешить имя.

Ответы

Ответ 1

Я думаю, что более простым решением было бы создать отдельный файл ресурсов для каждого языка.

Что касается этого случая, проверьте, имеет ли сборка, содержащая ресурсы, пространство имен по умолчанию для одного и того же текста (Project- > Properties- > Default namespace; в VS)

Проверьте также, если файл resx имеет свойство BuildAction, установленное в "Embedded resource"

Ответ 2

Звучит похоже на вопрос, который у нас был. Пространство имен было неправильным в дизайнере файлов ресурсов. Я исправил его, вручную перезапустив пользовательский инструмент в файле resx.

Щелкните правой кнопкой мыши файл your.resx и выберите "Запустить пользовательский инструмент".

Ответ 3

Я уверен, что у вас уже есть ответ, но на всякий случай:

  • Вы можете просмотреть свое ManifestResourceName, вызвав

    System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames() 
    

    Убедитесь, что имя манифеста и ваше имя в вызове GetString() идентичны.

  • Кроме того, убедитесь, что у вас есть правильное пространство имен в файле designer.resx:

    namespace Jfc.TFSAddIn {
    ...
    global::System.Resources.ResourceManager temp = 
                 new global::System.Resources.ResourceManager(
                 "Jfc.TFSAddIn.CommandBar", typeof(CommandBar).Assembly);
    ... 
    }
    
  • Откройте свойства файла resx: "Build Action" должно быть "Embedded Resource"

Ответ 4

Для меня источником проблемы было имя файлов rex, начинающихся с числа:

20160216_tranlation.resx

Мне нужно было добавить символ подчеркивания _ перед именем файла resx при вызове GetGlobalResourceObject:

public static string getResource(string key)
{
    return HttpContext.GetGlobalResourceObject("_20160216_tranlation", key).ToString();
}

Ответ 5

Этот ответ решил проблему для меня! GetGlobalResourceObject

Ответ 6

Я исправил пространство имен в файле конструктора (Resources.Designer.cs) в статическом свойстве ResourceManager, и это сработало для меня.

Смотрите код ниже:

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

Ответ 7

Я добавил временный класс внутри моего Form.cs while (тестирование отладки ||), из-за которого было вызвано это исключение. Файл Form.resx(Name || Resource ID) был изменен на имя временного класса вместо имени класса Form. Это вызвало у меня проблему. я (исправлено || облегчено), создав отдельный файл для моего временного класса в проекте.

Ответ 8

Одно решение - изменить свойство файла resx из содержимого в Embedded Resource и построить его. Убедитесь, что на этот раз u vil get

Ответ 9

Я столкнулся с этой проблемой в Xamarin.Forms, когда я попытался переименовать проект, ресурсы больше не могли быть загружены с тем же заявленным текстом ошибки.

Чтобы исправить эту проблему, мне пришлось модифицировать .csproj текстовым редактором и изменить логическое имя встроенного ресурса.

<EmbeddedResource Include="Localization\TextResources.resx">
      <Generator>ResXFileCodeGenerator</Generator>
      <LastGenOutput>TextResources.Designer.cs</LastGenOutput>
      <LogicalName>YourNewNamespaceName.TextResources.resources</LogicalName>
      <SubType>Designer</SubType>
</EmbeddedResource>

Также следите за автогенерированным классом при его восстановлении, пространство имен, указанное в нем, может измениться.

Надеюсь, что это поможет кому-то, кто попал в ту же ситуацию.