2010-06-01 113 views
2

我试图从字符串字典创建一个.resx文件。幸运的是.Net框架有一个ResXResourceWriter类。唯一的问题是,当我使用下面的代码创建文件时,我生成的resx文件的最后几行缺少。我检查了我的字典,它包含我期望的所有字符串对。ResXResourceWriter截断文件结尾

public void ExportToResx(Dictionary<string,string> resourceDictionary, string fileName) 
{ 
    var writer = new ResXResourceWriter(fileName); 

    foreach (var resource in resourceDictionary) 
    { 
     writer.AddResource(resource.Key, resource.Value); 
    } 
} 

不幸的是,这是一个有点难以显示整个RESX文件,因为它具有2198(应该有2222)线,但这里是最后的一点:

... 
2195 <data name="LangAlign_ReportIssue" xml:space="preserve"> 
2196  <value>Report an Issue</value> 
2197 </data> 
2198 <data name="LangAlign_Return 

BTW,请注意文件在“LangAlign_Return”中的“n”结尾截断。该字符串应为“LangAlign_ReturnToWorkspace”。该文件也应该在2222行结束。

回答

3

试试这个:

public void ExportToResx(Dictionary<string,string> resourceDictionary, string fileName) 
{ 
    using(var writer = new ResXResourceWriter(fileName)) 
    { 
     foreach (var resource in resourceDictionary) 
     { 
      writer.AddResource(resource.Key, resource.Value); 
     } 
    } 
} 

您需要调用Dispose()上的作家。 :)

0

“LangAlign_ReturnToWorkspace”实际上是这样说的还是“LangAlign_Return ToWorkspace”?

(与返回和ToWorkspace之间的空间或者一个非打印字符?)

也许这是造成elememt名字被错误地产生?

只是一个想法。

+0

我只是再次检查了这个建议,但在此字符串之前或之后没有非打印字符。当我读到你的建议时,我有一半认为这是问题。 谢谢, Aaron – 2010-06-01 20:42:15

+0

啊,太糟糕了,值得一试。如果您只将该值放入字典中,它是否会出现相同的错误? – Andy 2010-06-01 20:45:01

+0

我编辑了我用来创建Dictionary的XML文件(确保任何奇怪的字符保留)到犯规条目。我还保留了所有低于此值的其他条目。该文件在其他位置和XML属性中间被切断。所以,我知道这不是我的字符串,因为它在由ResXResourceWriter类创建的位置切断。嗯,我想知道这是怎么回事。我的代码不能更简单。 – 2010-06-01 21:09:52