翼度科技»论坛 编程开发 .net 查看内容

.NET把文件嵌入到程序集中的EmbeddedFile

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
简介
有时候我们在发布程序时,不想让客户看到项目中的文件,这时就可以使用.NET的嵌入文件功能(虚拟文件)。在.NET中,虚拟文件(Virtual File)是一种特殊类型的文件,它们在编译时被嵌入到程序集中,而不是作为独立的文件存在于文件系统中。EmbeddedFile是指在编译时将文件内容嵌入到程序集中,并通过虚拟路径来访问的文件。
使用步骤:
1、嵌入的文件配置
首先将要嵌入的文件添加到项目中,我们在vs项目中新建一个名为"dotnet"的文本文件,并右键属性设置其生成操作为 "嵌入的资源"。设置完成右键选择项目 "属性",然后在属性窗口中 "生成" 选项来完成嵌入。如下图:

生成后的文件夹是没有这个文件,如下图

2、文件说明
在代码中可以使用虚拟路径来访问嵌入的文件。虚拟路径是指通过程序集的命名空间和文件名来构建的路径。例如,如果嵌入的文件名为 "dotnet.txt",它位于命名空间为 "Test7" 的程序集中,那么虚拟路径就是 "Test7.dotnet.txt"。
3、用C#代码读取嵌入文件
参考代码如下:
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using System.Text;
  5. namespace Test7
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             string embeddedFilePath = "Test7.dotnet.txt";
  12.             string fileContent = ReadEmbeddedFile(embeddedFilePath);
  13.             Console.WriteLine(fileContent);
  14.         }
  15.         static string ReadEmbeddedFile(string embeddedFilePath)
  16.         {
  17.             Assembly assembly = Assembly.GetExecutingAssembly();
  18.             //如果跨程序访问或者不确定文件,这里可以判断文件流是否为null
  19.             using (Stream stream = assembly.GetManifestResourceStream(embeddedFilePath))
  20.             {
  21.                 if (stream == null)
  22.                 {
  23.                     throw new Exception("Embedded文件未发现: " + embeddedFilePath);
  24.                 }
  25.                 using (StreamReader reader = new StreamReader(stream))
  26.                 {
  27.                     return reader.ReadToEnd();
  28.                 }
  29.             }
  30.         }
  31.     }
  32. }
复制代码
在上面的示例中,`ReadEmbeddedFile` 方法通过虚拟路径获取嵌入的文件流,并使用 `StreamReader` 读取文件内容。然后,将文件内容打印到控制台。

注意:虚拟文件的路径是区分大小写的,并且要正确地指定命名空间和文件名。此外,如果文件位于不同的程序集中,你需要使用正确的程序集名称来构建虚拟路径。
结语
本文讲述了在 .NET Core 中使用虚拟文件(EmbeddedFile)的基本方法。当然你也可以将任意类型的文件(例如文本文件、图像文件等)嵌入到程序集中,并以使用上面的方式指定虚拟路径的方式访问它们。它的好处是嵌入方便发布程序,尤其是winform桌面类别的程序。希望本文对你有所收获,欢迎留言或者吐槽!
参考:
1、learn.microsoft.com/zh-cn/dotnet/core/extensions/resources
2、chatgpt
  1. 来源公众号:DotNet开发跳槽
复制代码
来源:https://www.cnblogs.com/xbhp/archive/2023/08/18/17640199.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具