Ресурсные файлы не обнаружены при использовании текстовых файлов

Я работаю над 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>
Другие вопросы по тегам