将文件编译成库并访问它,但不作为资源

Compile a file into a library and access it, but not as a resource

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

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

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

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

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

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

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

资源文件的“生成操作”设置有什么用?现在我的资源文件的“构建操作”是“资源”。所有其他“Build Action”设置有什么作用(如“Embedded Resource”、“Content”、“AdditionalFiles”、“ApplicationDefinition”等)?朝那个方向做一些研究会有帮助吗?

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

之后我可以用这样的代码获取 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();
}