2014-04-02 51 views
0

的故事是这样的:阅读“合并”的字符串从两个资源文件

  1. 的申请是由2不嵌入的资源文件(resource.resx,resource.user.resx)
  2. 提供的“ Resource.resx”有两个字符串:类型“MOBEL”名称“Stuhl”
  3. 的 “Resource.user.resx” 有串:名称“Sessel”

应用程序有以下行

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

结果应该是这样的:

MOBEL:Sessel

在普通情况下, “Resource.resx”可以由多个字符串提供。我想archieve是每个Resource.ResourceStingId istruction实现以下逻辑:

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

赞赏解决方案是一个自动化解决方案。

谢谢!

+1

基本上,你将不得不封装两个资源文件的访问权限来处理你的优先级规则。 – Crono

回答

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); 
    }