【问题标题】:Adding resources(XML) to DLL in C#在 C# 中将资源(XML)添加到 DLL
【发布时间】:2011-12-22 17:26:27
【问题描述】:

我有遵循项目结构

/build-out/MyApp.dll /dependencies/ResFile.xml /src/MyFile.cs

MyFile.cs 中,我想打开 /dependencies 目录中的 ResFile.xml 并阅读它以满足某些需要。 Visual Studio 中的所有功能都像一个魅力,但是当我制作一个 dll 并将它与另一个应用程序(作为外部库)一起使用时,我收到一个错误,因为它找不到 dependencies/ResFile.xml 文件。

那么,如何将资源文件添加到结果 MyApp.dll 文件中?

【问题讨论】:

  • 在用户的机器上部署你的应用后,你会遇到更大的问题。没有项目目录。一个简单的解决方案是将 .xml 文件复制到与 .exe 相同的目录中,这样找到它永远不会有问题。或者实际上将其嵌入为真实资源。项目 + 属性,资源选项卡。
  • @HansPassant,有没有办法将库的“非 dll”依赖项包含到宿主项目中,以便可以更改这些依赖项(例如文本文件)而无需重新编译库。 (如果是嵌入式资源,如果更改(txt)文件,我们需要重新编译库)
  • @ANewGuyInTown 一个潜在的解决方案是在 dll 中嵌入一个默认文件,如果不存在则使用它来创建一个磁盘文件。然后从用户可以编辑的磁盘文件加载。如果您从程序文件目录(exe 位置)加载,您可能需要管理员权限,因此可以查看标准应用数据目录。

标签: c# visual-studio visual-studio-2008 dll resources


【解决方案1】:

StackOverflow 上有几篇关于它的文章,但是一些快速注释和代码...

  1. 确保在 Build Action 下的属性中将该文件标记为“嵌入式资源”。
  2. 我正在使用一些代码从 DLL 读取 html 文件,这大致就是我将其转换为字符串的方式。给你我希望的总体思路。

        foreach (string resource in Assembly.GetExecutingAssembly().GetManifestResourceNames())
        {
            if (resource.EndsWith("Snippet.htm"))
            {
                Stream s = Assembly.GetExecutingAssembly().GetManifestResourceStream(resource);
                byte[] buff = new byte[s.Length];
                s.Read(buff, 0, buff.Length);
    
                string snippet = Encoding.UTF8.GetString(buff);
            }
        }
    

【讨论】:

  • 没有制作和嵌入式资源怎么办?换句话说,可以在文件中发生更改,而无需重新编译 dll。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多