Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры
Я создал сборку и позже переименовал ее.
Затем я начал получать ошибки во время выполнения при вызове:
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 ответов
Я думаю, что более простым решением было бы создать отдельный файл ресурсов для каждого языка.
Что касается этого случая, проверьте, имеет ли сборка, содержащая ресурсы, пространство имен по умолчанию, установленное на тот же текст (Project->Properties->Default namespace; в VS)
Также проверьте, имеет ли файл resx свойство BuildAction, установленное на "Встроенный ресурс".
Я уверен, что вы уже получили ответ, но на всякий случай:
Вы можете просмотреть свой ManifestResourceName, позвонив
System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames()
Убедитесь, что имя Manifest и ваше имя в вызове 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"
Похоже на проблему, которую мы имели. Неверное пространство имен в конструкторе файла ресурсов. Я исправил это вручную, повторно запустив пользовательский инструмент в файле resx.
Щелкните правой кнопкой мыши на your.resx и выберите "Запустить пользовательский инструмент".
Для меня источником проблемы было присвоение имен файлам rex, начинающимся с цифры:
20160216_tranlation.resx
Я должен был добавить подчеркивание _
перед именем файла resx при вызове GetGlobalResourceObject
:
public static string getResource(string key)
{
return HttpContext.GetGlobalResourceObject("_20160216_tranlation", key).ToString();
}
Я добавил временный класс в мой Form.cs во время (тестирование || отладка), который вызвал это исключение. Файл Form.resx (Name || Resource ID) был изменен на временное имя класса вместо имени класса Form. Это вызвало проблему для меня. Я (исправил || облегченный), создав отдельный файл для моего временного класса в проекте.
Я столкнулся с этой проблемой в 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>
Также обратите внимание на автоматически сгенерированный класс, когда вы перестраиваете его, пространство имен, указанное в нем, может измениться.
Надеюсь, это поможет кому-то, кто попал в ту же ситуацию.
Одним из решений является изменение свойства файла resx с содержимого на Embedded Resource и его сборка. Конечно, на этот раз вы получите
Я исправил пространство имен в файле конструктора (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;
}
}
Получил эту ошибку, когда я добавил класс над частичным классом формы в моем приложении форм Windows.
Это ушло, когда я переместил класс НИЖЕ класса частичной формы.