【问题标题】:Resource files not detected when using restext files使用重新文本文件时未检测到资源文件
【发布时间】:2016-02-02 17:57:50
【问题描述】:

我正在开发 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 并进行了翻译。当我构建项目时,Satellite assembles 是在名为sv-se 的文件夹内的bin 文件夹中创建的。但是字符串仍然取自默认资源文件。我修改了默认文件,更改立即反映。

我尝试手动加载 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 构造函数?以及必须如何命名资源文件,这样我就不必编辑清单名称来创建资源管理器实例?

【问题讨论】:

    标签: c# .net healthvault


    【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 2013-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多