Ресурсные файлы не обнаружены при использовании текстовых файлов
Я работаю над HealthVault SDK от Microsoft и пытаюсь включить несколько переводов для текстовых ресурсов, поставляемых с SDK.
Это часть файла ресурса, используемого
resources.restext
# Used in many files
ListSeparator=,
ListFormat=, {0}
GroupSeparator=;
GroupFormat=; {0}
Range={0} - {1}
DateRange={0} to {1}
Это код, который инициализирует менеджер ресурсов.
private static ResourceManager InitRMWithAssembly(
string baseName,
Assembly assemblyToUse,
Type usingResourceSet)
{
ResourceManager rm = null;
if (usingResourceSet != null &&
baseName != null &&
assemblyToUse != null)
{
rm =
new ResourceManager(
baseName,
assemblyToUse,
usingResourceSet);
}
else if (usingResourceSet != null &&
baseName == null &&
assemblyToUse == null)
{
rm = new ResourceManager(usingResourceSet);
}
else if (usingResourceSet == null &&
baseName != null &&
assemblyToUse != null)
{
rm = new ResourceManager(baseName, assemblyToUse);
}
else
{
throw new ArgumentException("assemblyToUse cannot be null", "assemblyToUse");
}
return rm;
}
где baseName resources
, AssemblyToUse is Assembly.GetCallingAssembly()
,
Строки по умолчанию присутствуют в текстовом файле с именем resources.restext
, Я хочу перевести несколько строк на шведский и я добавил resources.sv-se.restext
и сделал переводы. Когда я строил проект, спутниковые сборки были созданы в bin
папка внутри папки с именем sv-se
, Но строки по-прежнему взяты из файла ресурсов по умолчанию. Я изменил файл по умолчанию, и изменения отражаются немедленно.
Я попытался загрузить DLL вручную, и имена манифеста состояли из имени Microsoft.Health.ItemTypes.resources.sv-se.resources
, Я инициализировал ResourceManager
с этим именем и той же сборкой.
var rm = new ResourceManager("Microsoft.Health.ItemTypes.resources.sv-se.resources", assembly);
rm.GetString("Key"); // Causes MissingManifestResourceException
Тем не менее, я попытался и смог получить ключ с помощью следующего
var rm = new ResourceManager("Microsoft.Health.ItemTypes.resources.sv-se", assembly); // manifest name - trailing resources
rm.GetString("Key"); // works!
У меня вопрос такой:
Как правильно использовать ResourceManger
? Нужно ли передавать спутник в сборе конструктору RM? и как должны быть названы файлы ресурсов, чтобы мне не приходилось редактировать имя манифеста для создания экземпляра менеджера ресурсов?
1 ответ
Решаемые.
в .csproj
для проекта было изменено логическое имя ресурса.
Изменение csproj на следующее решило мои проблемы
<ItemGroup>
<EmbeddedResource Include="resources.restext">
<LogicalName>resources.resources</LogicalName>
</EmbeddedResource>
<EmbeddedResource Include="resources.sv-se.restext">
<LogicalName>resources.sv-se.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>