Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры
Я создал сборку и позже переименовал ее.
Затем я начал получать ошибки во время выполнения при вызове:
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>
Также следите за автогенерированным классом при его восстановлении, пространство имен, указанное в нем, может измениться.
Надеюсь, что это поможет кому-то, кто попал в ту же ситуацию.