使用restext文件时未检测到资源文件

时间:2016-02-01 12:41:19

标签: c# .net healthvault

我正在使用Microsoft的HealthVault SDK,我正在尝试为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为Assembly.GetCallingAssembly()

默认字符串存在于名为resources.restext的文本文件中。我希望将一些字符串翻译成瑞典语,然后我添加了resources.sv-se.restext并进行了翻译。当我构建项目时,在名为bin的文件夹内的sv-se文件夹中创建了Satellite组件。但是字符串仍然来自默认资源文件。我修改了默认文件,并立即反映了更改。

我尝试手动加载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 个答案:

答案 0 :(得分:0)

解决。

在项目的.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>