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

news2024/12/23 22:08:45

简介

有时候我们在发布程序时,不想让客户看到项目中的文件,这时就可以使用.NET的嵌入文件功能(虚拟文件)。在.NET中,虚拟文件(Virtual File)是一种特殊类型的文件,它们在编译时被嵌入到程序集中,而不是作为独立的文件存在于文件系统中。EmbeddedFile是指在编译时将文件内容嵌入到程序集中,并通过虚拟路径来访问的文件。

使用步骤:

1、嵌入的文件配置

首先将要嵌入的文件添加到项目中,我们在vs项目中新建一个名为"dotnet"的文本文件,并右键属性设置其生成操作为 “嵌入的资源”。设置完成右键选择项目 “属性”,然后在属性窗口中 “生成” 选项来完成嵌入。如下图:

图片

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

图片

2、文件说明

在代码中可以使用虚拟路径来访问嵌入的文件。虚拟路径是指通过程序集的命名空间和文件名来构建的路径。例如,如果嵌入的文件名为 “dotnet.txt”,它位于命名空间为 “Test7” 的程序集中,那么虚拟路径就是 “Test7.dotnet.txt”。

3、用C#代码读取嵌入文件

参考代码如下:

using System;
using System.IO;
using System.Reflection;
using System.Text;

namespace Test7
{
    class Program
    {
        static void Main(string[] args)
        {
            string embeddedFilePath = "Test7.dotnet.txt";
            string fileContent = ReadEmbeddedFile(embeddedFilePath);
            Console.WriteLine(fileContent);
        }
        static string ReadEmbeddedFile(string embeddedFilePath)
        {
            Assembly assembly = Assembly.GetExecutingAssembly();
            //如果跨程序访问或者不确定文件,这里可以判断文件流是否为null
            using (Stream stream = assembly.GetManifestResourceStream(embeddedFilePath))
            {
                if (stream == null)
                {
                    throw new Exception("Embedded文件未发现: " + embeddedFilePath);
                }
                using (StreamReader reader = new StreamReader(stream))
                {
                    return reader.ReadToEnd();
                }
            }
        }
    }
}

在上面的示例中,`ReadEmbeddedFile` 方法通过虚拟路径获取嵌入的文件流,并使用 `StreamReader` 读取文件内容。然后,将文件内容打印到控制台。

图片

注意:虚拟文件的路径是区分大小写的,并且要正确地指定命名空间和文件名。此外,如果文件位于不同的程序集中,你需要使用正确的程序集名称来构建虚拟路径。

结语

本文讲述了在 .NET Core 中使用虚拟文件(EmbeddedFile)的基本方法。当然你也可以将任意类型的文件(例如文本文件、图像文件等)嵌入到程序集中,并以使用上面的方式指定虚拟路径的方式访问它们。它的好处是嵌入方便发布程序,尤其是winform桌面类别的程序。希望本文对你有所收获,欢迎留言或者吐槽!

参考:

1、learn.microsoft.com/zh-cn/dotnet/core/extensions/resources

2、chatgpt

来源公众号:DotNet开发跳槽

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/893851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手把手教你用Git备份保存代码到云端

第一步 :创建一个Gitee仓库,需要先下载安装git,在下载安装完成后,我们需要首先去Gittee官网上创建一个仓库 路径会自动生成,点击创建即可 第二步: 方法一:用图形化界面(方便) 下载&#xff…

听说换上人大金仓“自动挡”,效率提升4000多倍!

前情提要 随着数据规模以及应用业务场景复杂度的不断增加,更大规模数据量的数据库应用场景出现,对于传统关系型数据库的优化能力要求也更高。 因为SQL是解释性语言,用户可以指定要什么,而无需关心如何达成目的。所以对于同样一条S…

录取结果怎么公布?这个技术可以轻松实现

对于录取结果的公布,一直是考生和家长重点关注的话题,因此学校公布录取情况的方式和效果也一直是学校工作的重点和难点,传统的公布方式涉及技术开发和服务器搭建,开发周期也较长!一般有经验的老教师都会选择使用易查分…

分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

文章目录 1. 自动提交消费位移2. 自动提交消费位移存在的问题?3. 手动提交消费位移1. 同步提交消费位移2. 异步提交消费位移3. 同步和异步组合提交消费位移4. 提交特定的消费位移5. 按分区提交消费位移 4. 消费者查找不到消费位移时怎么办?5. 如何从特定…

JavaSE-17 【异常】

第一章 什么是异常 1.1 异常的概念 异常:指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止 在Java中,异常本身就是一个类,产生异常就是创建一个异常对象并且抛出一个异常对象的过程 Java处理…

如何快速高效地进行 API 自动化测试

我们的研发团队最需要应对的就是各种新需求。软件越来越快的更新速度也让整个系统也变得越来越复杂,这让 测试 工作面临着巨大的挑战。测试人员必须与开发人员沟通,确定测试范围,并及时获取最新的接口用例数据来验证功能。但是,由…

【Apollo】Apollo版本特点与改进

特点与改进 概述里程碑6.0版本特点及改进7.0版本特点及改进8.0版本特点及改进代码差异 主页传送门:📀 传送 概述 Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快…

【Web开发指南】MyEclipse XML编辑器的高级功能简介

MyEclipse v2023.1.2离线版下载 1. 在MyEclipse中编辑XML 本文档介绍MyEclipse XML编辑器中的一些可用的函数,MyEclipse XML编辑器包括高级XML编辑,例如: 语法高亮显示标签和属性内容辅助实时验证(当您输入时)文档内容的源(Sou…

协同过滤推荐算法-基于Django+mysql的智能水果销售系统设计(可做计算机毕设)

随着科技的不断发展,智能化已经成为各行各业的趋势,水果销售行业也不例外。智能水果销售系统就是应运而生的一种智能化解决方案,它可以为用户提供更加便捷、高效的购物体验。其中,系统模块是智能水果销售系统的重要组成部分。 系…

postgresql 谨慎使用正则删除(%,_)

建表 CREATE TABLE public.ellistest (id bigserial NOT NULL,"name" varchar null,primary key (id) );插入数据 删除含有_线的数据 你会发现表被清空了 delete from ellistest where name like %_%原因 百分号(%)用于表示0、1或多个字符或数字。 下划线通配符…

Java【动态规划】图文详解 “路径问题模型“ , 教你手撕动态规划

文章目录 一、不同路径I1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 二、不同路径II1, 题目2, 思路分析2.1, 状态表示2.2, 状态转移方程2.3, 初始化2.4, 填表顺序2.5, 返回值 3, 代码 三、礼物最大价值1, 题目2, 思路分析2.…

从零基础到精通IT:探索高效学习路径与成功案例

文章目录 导语:第一步:明确学习目标与方向选择适合的IT方向设定具体的学习目标咨询和调研 第二步:系统学习基础知识选择适合的编程语言学习数据结构和算法掌握操作系统和计算机网络基础 第三步:实践项目锻炼技能选择合适的项目编写…

C语言:初阶测试错题(查漏补缺)

题一:字符串倒置 示例1 输入 I like beijing. 输出 beijing. like I 思路一: 定义字符串数组arr[ ] ,利用gets()将要倒置的字符串输入,记录字符串长度len,此时写一个逆置函数Inversion(),第一步将整个字符串逆置&…

基于决策树(Decision Tree)的乳腺癌诊蚓

决策树(DecisionTree)学习是以实例为基础的归纳学习算法。算法从--组无序、无规则的事例中推理出决策树表示形式的分类规则,决策树也能表示为多个If-Then规则。一般在决策树中采用“自顶向下、分而治之”的递归方式,将搜索空间分为若千个互不相交的子集,在决策树的内部节点(非叶…

C语言刷题训练DAY.7

1.及格分数 解题思路&#xff1a; 这里直接用while语句控制循环&#xff0c;if else语句判断即可。 解题代码&#xff1a; #include<stdio.h> int main() {int a 0;while(scanf("%d", &a) ! EOF){if (a >60)printf("Pass\n");elseprintf…

HCIP学习--交换技术

前置学习 HICA学习&#xff08;第一天&#xff09;--网络基础_板栗妖怪的博客-CSDN博客 HCIA学习--VLAN一些常识及在ensp上实现VLAN配置_ensp vlan_板栗妖怪的博客-CSDN博客 一个小知识 在一个公司内部使用的路由技术很少&#xff0c;用的是交换技术&#xff0c;使用几个三…

【gitkraken】gitkraken自动更新问题

GitKraken 会自动升级&#xff01;一旦自动升级&#xff0c;你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。 在安装 GitKraken 之后&#xff0c;在你的安装目录&#xff08;C:\Users\<用户名>\AppData\Local\gitkraken&#xff09;下会有一个名为 Update.exe 的…

【从零学习python 】47. 面向对象编程中的继承概念及基本使用

文章目录 继承的基本使用代码逐行讲解说明:进阶案例 继承的基本使用 在现实生活中&#xff0c;继承一般指的是子女继承父辈的财产&#xff0c;父辈有的财产&#xff0c;子女能够直接使用。 程序里的继承 继承是面向对象软件设计中的一个概念&#xff0c;与多态、封装共为面向对…

在远程服务器上安装环境

第一步&#xff1a;下载anaconda 进入官网https://www.anaconda.com/download#downloads,点击linux的小企鹅 选择下载linux64位版本。 第二步&#xff1a;安装 打开xftp&#xff0c;将文件上传到服务器中。 然后在你自己的文件夹中输入bash Anaconda3-2023.07-2-Linux-x86…