Xamain: MissingManifestResourceException при попытке доступа к ресурсу
Вступление
Я создаю свое первое приложение Xamarin (сначала оно будет нацелено на UWP, затем на Android, наконец, на iOS).
В основном, приложению нужно несколько языков: английский (по умолчанию), французский, испанский, русский и шведский как минимум.
Я пытаюсь добавить меньше кода, специфичного для платформы, поэтому для локализации не было добавлено никакого конкретного кода.
Я использовал проект UseResxLocaliaztion Xamarin GitHub с документацией по локализации Xamarin.
По сути, я просто копирую и пытаюсь использовать ресурсы этого проекта на своих. Но пространство имен было UsingResxLocalization.Resx
и мой WhoStart.Resources
то же самое для имени папки, которая Resources
вместо Resx
,
Я обновил ResourceManager
собственность Designer.cs
файл, и попробуйте разные вещи со свойствами resx, как например, изменить Generator
и CustomToolNamespace
без результатов.
Я вручную изменил WhoStart.projitems
файл в некоторых моментах, так как мой VisualStudio не отступил файлы и не может генерировать Designer.cs
файл.
Моя среда
- Ежегодное обновление Windows 10 v1607 (14393.1066)
- Visual Studio 2017 v15.1 (26403.7)
- Xamarin 4.4.0.34
- Пакеты NuGet:
- Xamarin.Forms 2.3.4.231
- Microsoft.NETCore.UniversalWindowsPlatform 5.3.3
Эта проблема
Я имею System.Resources.MissingManifestResourceException при попытке получить доступ к ресурсам.
MainPage.xaml.cs
Debug.WriteLine(AppResources.AddButton);
System.Resources.MissingManifestResourceException: "Не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что "WhoStart.Resources.AppResources.resources" был правильно встроен или связан со сборкой "WhoStart.UWP" во время компиляции, или что все необходимые спутниковые сборки загружаются и полностью подписаны. '
Visual Studio
Я думаю, возможно, это исходит от моего окружения:
- Когда я создаю файл ресурсов с помощью мастера Visual Studio, он создает файл.resw.
- Visual Studio не генерирует автоматически
Designer.cs
файл - Когда я открываю файл.resx, меню Access Modifier отключается.
- Кажется, что у меня не все свойства проекта, которые я заметил на форумах
- У меня нет "Запустить пользовательский инструмент" при щелчке правой кнопкой мыши на файле.resx
Код
AppResources.resx
<?xml version="1.0" encoding="utf-8"?>
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="AddButton" xml:space="preserve">
<value>Add new item</value>
<comment>this string appears on a button to add a new item to the list</comment>
</data>
</root>
MainPage.xaml.cs
namespace WhoStart.Resources {
using System.Reflection;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class AppResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal AppResources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[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("WhoStart.Resources.AppResources", typeof(AppResources).GetTypeInfo().Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Add new item.
/// </summary>
internal static string AddButton {
get {
return ResourceManager.GetString("AddButton", resourceCulture);
}
}
}
}
WhoStart.projitems
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
<HasSharedItems>true</HasSharedItems>
<SharedGUID>2f09a751-1235-4d87-8839-d5828319ad81</SharedGUID>
</PropertyGroup>
<PropertyGroup Label="Configuration">
<Import_RootNamespace>WhoStart</Import_RootNamespace>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)ColorUtil.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ILocalize.cs" />
<Compile Include="$(MSBuildThisFileDirectory)MainPage.xaml.cs">
<DependentUpon>MainPage.xaml</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Resources\AppResources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.resx</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Resources\AppResources.es.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.es.resx</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)Resources\AppResources.fr.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>AppResources.fr.resx</DependentUpon>
</Compile>
<Compile Include="$(MSBuildThisFileDirectory)TranslateExtension.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)MainPage.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)App.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:UpdateDesignTimeXaml</Generator>
</EmbeddedResource>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\AppResources.es.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.es.Designer.cs</LastGenOutput>
<CustomToolNamespace>WhoStart.Resources</CustomToolNamespace>
</EmbeddedResource>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\AppResources.fr.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.fr.Designer.cs</LastGenOutput>
<CustomToolNamespace>WhoStart.Resources</CustomToolNamespace>
</EmbeddedResource>
<EmbeddedResource Include="$(MSBuildThisFileDirectory)Resources\AppResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>AppResources.Designer.cs</LastGenOutput>
<CustomToolNamespace>WhoStart.Resources</CustomToolNamespace>
</EmbeddedResource>
</ItemGroup>
</Project>
Исследование
- C# - создать файл designer.cs из файла ресурсов, созданного ResXRersourcewriter
- Открытые строго типизированные ресурсы с PublicResXFileCodeGenerator
- C# - Генерация Resx файлов для MVC
- C# - Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры
- Не удалось найти какие-либо ресурсы, подходящие для указанной культуры или нейтральной культуры
- C# - Локализация и файлы ресурсов
- C# - Использование ResourceManager
- Интернационализация кроссплатформенного приложения