从两个资源文件中读取“合并”字符串

时间:2014-04-02 12:55:45

标签: c# resx

故事如下:

  1. 应用程序由2个非嵌入式资源文件(resource.resx,resource.user.resx)提供
  2. “Resource.resx”有两个字符串:类型 “Möbel”名称 “Stuhl”
  3. “Resource.user.resx”包含字符串:名称 “Sessel”
  4. 该应用程序具有以下行

     Console.WriteLine("{0}: {1}", Resource.Type, Resource.Name)
    

    结果如下:

      

    Möbel:Sessel

    在一般情况下,“Resource.resx”可以由字符串dosens提供。我想要的是每个 Resource.ResourceStingId istruction实现以下逻辑:

    如果存在,则从“Resource.user.resx”返回 ResourceStingId 的值,如果不是“Resource.resx”中 ResourceStingId 的值

    赞赏的解决方案是自动化的。

    谢谢!

1 个答案:

答案 0 :(得分:0)

我得出结论,资源文件不是为这种技巧设计的实体。 调查问题发现了一些关于ResXFileCodeGenerator(http://www.codeproject.com/Articles/27473/Enhanced-Resource-File-Code-Generator-Type-safe-Fo)自定义的重复主题, 但是没有开始向这个方向挖掘,因为他认为投资不仅仅是一种好处。

还编写了一个虚拟方法,合并文件根据定义的规则。

private static void MergeResource()
    {
        var userDocument = XDocument.Load(@"resource.user.resx");
        var userData = userDocument.Root.Elements().Where(e => e.Name == "data");

        var originalDocument = XDocument.Load(@"resource.resx");
        var origData = originalDocument.Root.Elements().Where(e => e.Name == "data");
        var notMatchedData = origData.Where(oe => userData.All(ue => ue.Attribute("name").Value != oe.Attribute("name").Value));

        foreach (var data in notMatchedData)
            userDocument.Root.Add(data);

        userDocument.Save("Resource.resx", SaveOptions.None);
    }