Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры - PullRequest
15 голосов
/ 14 января 2011

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

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

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 не может разрешить имя.

Ответы [ 10 ]

29 голосов
/ 14 января 2011

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

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

Также проверьте, имеет ли файл resx свойство BuildAction, установленное на "Встроенный ресурс"

13 голосов
/ 02 августа 2012

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

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

10 голосов
/ 22 февраля 2014

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

  1. Вы можете просмотреть ваше ManifestResourceName, позвонив

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

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

  2. Также убедитесь, что в файле designer.resx указано правильное пространство имен:

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

1 голос
/ 16 февраля 2016

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

20160216_tranlation.resx

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

public static string getResource(string key)
{
    return HttpContext.GetGlobalResourceObject("_20160216_tranlation", key).ToString();
}
0 голосов
/ 03 июля 2018

Получил эту ошибку, когда я добавил класс НАД классом частичной формы в моем приложении для форм Windows.

Это ушло, когда я переместил класс НИЖЕ класса частичной формы.

0 голосов
/ 22 октября 2017

Я столкнулся с этой проблемой в 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>

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

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

0 голосов
/ 31 октября 2016

Одним из решений является изменение свойства файла resx с содержимого на Embedded Resource и его сборка. Конечно, в этот раз вы получите

0 голосов
/ 03 июня 2016

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

0 голосов
/ 27 мая 2015

Я исправил пространство имен в файле конструктора (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;
        }
    }
0 голосов
/ 20 апреля 2015

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

...