如何在不使用 System.Windows.Forms 的情况下以编程方式写入 Resx 文件而不出现乱码?
How to programmaticaly write to Resx file and not get gibberish without using System.Windows.Forms?
我正在尝试将键值对写入我的资源文件。我正在使用来自 MSDN 的代码(我知道这是我的第一个错误)并且在保存文件后充满了垃圾。我没有 windows 表单项目,所以我不想加载该命名空间。如果我绝对必须,我需要一种方法来避免在使用 ResXResourceWriter class.
时该代码库出现运行时错误
请注意,类似问题的答案无效。
using (FileStream fs = new FileStream(@"C:\Resource - Copy.resx", FileMode.Open))
using (var w = new ResourceWriter(fs))
{
while (lastKeyIndex > 0)
{
// Code to get key and value strings
w.AddResource(key, value);
}
w.Generate();
}
记事本++中的输出看起来像这样:
ÎÊï¾ ‘ lSystem.Resources.ResourceReader, mscorlib,
Version=4.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet
PADPADPÛ_€»b€17sžƒ>·‚šþÑ‚Ç1ƒ¡ºŽƒ(A„‚ß\„” Ö„l–H…1¯…!®b†·C!‡§~f‡üÜ
‰š`w‰vК‰%
...稍后可读但不正确的文本和标记...
L a b e l _ C o l o r /* "W o r k u p 2 _ L a b e l _
有什么问题或应该如何工作?
编辑
注意:重复的问题不是重复的,因为它不是针对相同的项目类型。
这是一个 asp.net 项目。当我添加 windows 表单引用时,我可以编译应用程序,但 ResXResourceWriter class.
上存在运行时错误
CS0246: The type or namespace name 'ResXResourceWriter' could not be
found (are you missing a using directive or an assembly reference?)
ResourceWriter
用于写入二进制 .resources
文件。请改用 System.Windows.Forms.dll
中的 ResXResourceWriter
。
示例代码:
using (IResourceWriter writer = new ResXResourceWriter(file))
{
foreach (KeyValuePair<string, string> item in dictionary)
writer.AddResource(item.Key, item.Value);
}
根据工作人员的建议,由于 ResXResourceWriter 的错误,我使用 XDocument 来处理这种情况 class。
我将下面的代码与 foreach 循环一起用于我需要批量插入到我的 RESX 文件中的数据源。为了简洁起见,我去掉了 foreach 循环。
唯一棘手的部分是正确添加下面正确显示的 xml:space 属性。
我是这样做的,以防其他人也想这样做。
XDocument xd;
using (FileStream fs = new FileStream(@"somepath\App_Code\Resource - Copy.resx"
, FileMode.Open, FileAccess.Read))
{
xd = XDocument.Load(fs);
}
XElement elm;
// Loop some data source here and build up your resx file
elm = new XElement("data"
, new XAttribute("name", key)
, new XAttribute(XNamespace.Xml + "space", "preserve")
, new XElement("value", value));
xd.Root.Add(elm);
// end loop
xd.Save(@"somepath\App_Code\Resource - Copy.resx");
最终我用它来利用多语言应用程序工具包插件。我在 XAML 中获取了另一个开发人员语言文件,将他所有的英语加载到我的测试项目 resx 文件中,然后使用工具包填充所有语言文件,然后编写了一个自定义应用程序来生成匹配的 XAML 文件每种语言。
效果很好。
使用来自 nugit 包的 System.resource.netstanders ResXResourceReader.NetStanderds
我正在尝试将键值对写入我的资源文件。我正在使用来自 MSDN 的代码(我知道这是我的第一个错误)并且在保存文件后充满了垃圾。我没有 windows 表单项目,所以我不想加载该命名空间。如果我绝对必须,我需要一种方法来避免在使用 ResXResourceWriter class.
时该代码库出现运行时错误请注意,类似问题的答案无效。
using (FileStream fs = new FileStream(@"C:\Resource - Copy.resx", FileMode.Open))
using (var w = new ResourceWriter(fs))
{
while (lastKeyIndex > 0)
{
// Code to get key and value strings
w.AddResource(key, value);
}
w.Generate();
}
记事本++中的输出看起来像这样:
ÎÊï¾ ‘ lSystem.Resources.ResourceReader, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089#System.Resources.RuntimeResourceSet
PADPADPÛ
_€»b€17sžƒ>·‚šþÑ‚Ç1ƒ¡ºŽƒ(A„‚ß\„” Ö„l–H…1¯…!®b†·C!‡§~f‡üÜ
‰š`w‰vК‰%
...稍后可读但不正确的文本和标记...
L a b e l _ C o l o r /* "W o r k u p 2 _ L a b e l _
有什么问题或应该如何工作?
编辑 注意:重复的问题不是重复的,因为它不是针对相同的项目类型。
这是一个 asp.net 项目。当我添加 windows 表单引用时,我可以编译应用程序,但 ResXResourceWriter class.
上存在运行时错误CS0246: The type or namespace name 'ResXResourceWriter' could not be found (are you missing a using directive or an assembly reference?)
ResourceWriter
用于写入二进制 .resources
文件。请改用 System.Windows.Forms.dll
中的 ResXResourceWriter
。
示例代码:
using (IResourceWriter writer = new ResXResourceWriter(file))
{
foreach (KeyValuePair<string, string> item in dictionary)
writer.AddResource(item.Key, item.Value);
}
根据工作人员的建议,由于 ResXResourceWriter 的错误,我使用 XDocument 来处理这种情况 class。
我将下面的代码与 foreach 循环一起用于我需要批量插入到我的 RESX 文件中的数据源。为了简洁起见,我去掉了 foreach 循环。
唯一棘手的部分是正确添加下面正确显示的 xml:space 属性。
我是这样做的,以防其他人也想这样做。
XDocument xd;
using (FileStream fs = new FileStream(@"somepath\App_Code\Resource - Copy.resx"
, FileMode.Open, FileAccess.Read))
{
xd = XDocument.Load(fs);
}
XElement elm;
// Loop some data source here and build up your resx file
elm = new XElement("data"
, new XAttribute("name", key)
, new XAttribute(XNamespace.Xml + "space", "preserve")
, new XElement("value", value));
xd.Root.Add(elm);
// end loop
xd.Save(@"somepath\App_Code\Resource - Copy.resx");
最终我用它来利用多语言应用程序工具包插件。我在 XAML 中获取了另一个开发人员语言文件,将他所有的英语加载到我的测试项目 resx 文件中,然后使用工具包填充所有语言文件,然后编写了一个自定义应用程序来生成匹配的 XAML 文件每种语言。
效果很好。
使用来自 nugit 包的 System.resource.netstanders ResXResourceReader.NetStanderds