Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中向DLL添加资源(XML)#_C#_Visual Studio_Visual Studio 2008_Dll_Resources - Fatal编程技术网

C# 在C中向DLL添加资源(XML)#

C# 在C中向DLL添加资源(XML)#,c#,visual-studio,visual-studio-2008,dll,resources,C#,Visual Studio,Visual Studio 2008,Dll,Resources,我必须遵循项目结构 /build-out/MyApp.dll /dependencies/ResFile.xml /src/MyFile.cs /buildout/MyApp.dll /依赖项/ResFile.xml /src/MyFile.cs 在MyFile.cs中,我想打开/dependencies目录中的我的ResFile.xml,并根据需要阅读它。所有这些在Visual Studio中都像一个魔咒,但当我创建一个dll并将其与另一个应用程序(作为外部库)一起使用时,我会

我必须遵循项目结构

/build-out/MyApp.dll /dependencies/ResFile.xml /src/MyFile.cs /buildout/MyApp.dll /依赖项/ResFile.xml /src/MyFile.cs 在MyFile.cs中,我想打开/dependencies目录中的我的ResFile.xml,并根据需要阅读它。所有这些在Visual Studio中都像一个魔咒,但当我创建一个dll并将其与另一个应用程序(作为外部库)一起使用时,我会收到一个错误,因为它找不到dependencies/ResFile.xml文件


那么,如何将resorce文件添加到resultMyApp.dll文件中呢?

有一些关于StackOverflow的文章,但有一些快速注释和代码

  • 确保在“生成操作”下的属性中将文件标记为“嵌入资源”
  • 我正在使用一些代码从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);
            }
        }
    

  • 在用户机器上部署应用程序后,您将遇到更大的问题。没有项目目录。一个简单的解决方案是只需将.xml文件复制到与.exe相同的目录中,这样查找它就不会有问题。或者将其作为真正的资源嵌入。Project+属性,Resources选项卡。@HansPassant,是否有任何方法将库的“非dll”依赖项包含到宿主项目中,以便无需重新编译库即可更改这些依赖项(例如文本文件)。(如果是嵌入式资源,我们需要在更改(txt)文件时重新编译库)@ANewGuyInTown这里一个潜在的解决方案是在dll中嵌入一个默认文件,如果不存在,则使用该文件创建磁盘上的文件。然后从用户可以编辑的磁盘文件加载。如果从program files目录(exe位置)加载,您可能需要管理员权限,因此可以改为查看标准应用程序数据目录。如何在不生成和嵌入资源的情况下执行此操作?换句话说,更改可以在文件中发生,而无需重新编译dll。