C#能否从Assembly(程序集)中读取流数据?
如何从.NET程序集中读取内部流数据?
当然可以,程序集中的内部流一般指嵌入的资源文件,只要把文件标记为嵌入资源,就能通过Assembly类的相关方法读取。下面是具体步骤和代码示例:
步骤1:将文件标记为嵌入资源
在Visual Studio中,选中要嵌入的文件(比如txt、json、二进制文件等),右键选择「属性」,将「生成操作」设置为嵌入的资源。
步骤2:读取嵌入资源的流
获取程序集实例
- 读取当前运行的程序集:
Assembly.GetExecutingAssembly() - 读取外部程序集:
Assembly.LoadFrom("你的程序集路径.dll/.exe")
读取资源流
使用GetManifestResourceStream()方法,注意资源名称的格式是项目命名空间.文件名(如果文件在子文件夹里,还要加上文件夹路径,比如MyApp.Folder.File.txt)。
完整代码示例
using System; using System.IO; using System.Reflection; class ResourceReader { static void Main() { // 获取当前程序集 Assembly assembly = Assembly.GetExecutingAssembly(); // 替换为你的资源名称,可通过下面的代码获取所有资源名确认 string resourceName = "MyProjectNamespace.MyEmbeddedFile.txt"; // 读取资源流 using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName)) { if (resourceStream == null) { Console.WriteLine("未找到指定的嵌入资源,请检查资源名称是否正确"); return; } // 示例:读取文本内容 using (StreamReader reader = new StreamReader(resourceStream)) { string content = reader.ReadToEnd(); Console.WriteLine("资源内容:"); Console.WriteLine(content); } } } }
如何确认资源名称?
如果不确定资源的完整名称,可以用下面的代码列出程序集所有嵌入资源的名称:
Assembly assembly = Assembly.GetExecutingAssembly(); foreach (string resourceName in assembly.GetManifestResourceNames()) { Console.WriteLine("资源名称:" + resourceName); }
读取外部程序集的资源
如果要读取外部程序集里的嵌入资源,只需替换程序集的获取方式:
// 加载外部程序集 Assembly externalAssembly = Assembly.LoadFrom(@"D:\Projects\MyExternalAssembly.dll"); // 读取资源流(资源名称格式和目标程序集的命名空间一致) using (Stream stream = externalAssembly.GetManifestResourceStream("ExternalNamespace.Data.bin")) { // 处理流数据 }
内容的提问来源于stack exchange,提问作者awthz Zei
相关产品推荐
相关产品推荐

