【问题标题】:Compile a file into a library and access it, but not as a resource将文件编译到库中并访问它,但不能作为资源
【发布时间】:2021-05-27 14:29:25
【问题描述】:

我们的软件确实有一种很古老的,而且对于今天的可能性来说可能是一种很奇怪的可翻译方式。其原因可能是,可翻译的字符串来自非常不同的地方,例如 VB6 dll、.NET dll、Access 表单/报告、元数据……等等。嗯,就是这样。

一般来说,有一种工具可以从不同的来源中提取所有可翻译的字符串,并将它们转换为可以使用专业翻译工具翻译的格式。之后,只要有人想要翻译,翻译就会转换回软件可以使用的格式。

对于 .NET dll,该工具从 dll 中提取所有资源并在翻译后将它们放在单独的文本文件中,如果需要翻译软件,它会从这些文本文件中读取翻译后的资源。

现在我的问题...我想将一个 xml 文件作为资源放入其中一个 dll 中,并且不应提取此 xml 文件进行翻译,也不应从包含已翻译字符串的文本文件中读取它.

但现在,正是这种情况发生了,提取器提取此 xml 文件的内容进行翻译,翻译后的软件在翻译后的文本文件中查找该 xml 文件。

当然,我可以尝试通过更改提取器以跳过文件资源并修复决定在何处查找资源的软件部分来解决该问题。但是我们软件的这一部分并不是我的专长。

所以我想你可能知道一种将 xml 文件放入 dll 并在不作为资源的情况下访问它的方法?

资源文件的“构建操作”设置有什么用?现在我的资源文件的“构建操作”是“资源”。所有其他“构建操作”设置有什么作用(如“嵌入式资源”、“内容”、“附加文件”、“应用程序定义”……)?朝那个方向做一些研究会有所帮助吗?

【问题讨论】:

  • 如何从资源中读取 XML 文件?一种(有点笨拙的)解决方法可能是将 XML 文件转换为常量。
  • 按照通常的方式阅读Properties.Resources.<ResourceName>。 xml 文件需要不时更改。这在一个常数中可能很困难。

标签: .net resources


【解决方案1】:

经过大量搜索和尝试,它对我的​​情况有所帮助,删除文件资源并将带有“EmbeddedResource”的 xml 文件作为“构建操作”添加到项目中。

之后我可以用这样的代码获取 xml 文件的内容:

string xmlFile;

//to find out the full name of the embedded resource use the following line
//string[] resourceNames = System.Reflection.Assembly.GetCallingAssembly().GetManifestResourceNames();

using (System.IO.TextReader reader = new System.IO.StreamReader(System.Reflection.Assembly.GetCallingAssembly().GetManifestResourceStream(<FullResourceName>), System.Text.Encoding.UTF8))
{
    xmlFile = reader.ReadToEnd();
    reader.Close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 2021-12-07
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多