C# 把dll打包到exe文件,真的可以 。文件批量转了ANSI编码

news2024/9/23 15:24:02

在 C# 中,将 DLL 文件打包到 EXE 文件中可以使用 ILRepack 工具。ILRepack 是一个开源的工具,可以合并多个 DLL 文件并将它们嵌入到一个 EXE 文件中,从而实现将 DLL 打包到 EXE 的功能。

以下是使用 ILRepack 工具打包 DLL 到 EXE 的步骤:

  1. 首先,在项目中使用 NuGet 包管理器将 ILRepack 安装到项目中。

  2. 在项目的输出文件夹中找到已编译的 EXE 文件和需要打包的 DLL 文件。

  3. 打开命令提示符(或 PowerShell),导航到已编译的 EXE 文件和 DLL 文件所在的文件夹。

  4. 在命令提示符中输入以下命令,并执行:

 
 

plaintextCopy code

ILRepack.exe /out:MergedApp.exe App.exe Lib1.dll Lib2.dll Lib3.dll ...

其中,MergedApp.exe 是要生成的合并后的 EXE 文件的名称,App.exe 是原始的 EXE 文件名,Lib1.dll, Lib2.dll, Lib3.dll 是需要打包到 EXE 中的 DLL 文件名列表。

  1. 执行命令后,ILRepack 将会合并指定的 EXE 文件和 DLL 文件,并将合并后的文件保存为 MergedApp.exe

完成以上步骤后,您将获得一个包含 DLL 文件的 EXE 文件。您可以运行该 EXE 文件,并使用其中的功能,无需再单独依赖 DLL 文件。请注意,此方法适用于.NET Framework 项目。对于 .NET Core 项目,可以使用 .NET Core 自带的 dotnet publish 命令进行类似的操作。

cd C:\Users\wuqimei\source\repos\FileConvertion\FileConvertion\bin\Release
ILRepack.exe /out:FileConvertionM.exe FileConvertion.exe Ude.NetStandard.dll

  

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Ude;

namespace FileConvertion
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button_SelectFolder_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
             显示选择文件夹的对话框
            //FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            //if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            //{
            //    string folderPath = folderBrowserDialog.SelectedPath;
            //    this.Convertion(folderPath);
            //}

            this.Convertion(Environment.CurrentDirectory);
        }
        private  void Log(string message)
        {
            textBox1.Text += message + "\r\n";
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //this.Convertion();
           
        }
        void Convertion(string folderPath = @"C:\Users\wuqimei\Desktop\Desktop")
        {
            //string folderPath = @"C:\Users\wuqimei\Desktop\Desktop";
            Log("FolderPath:" + folderPath);
            DirectoryInfo directoryInfo = new DirectoryInfo(folderPath);

            int count = 0;
            // 遍历文件夹下的所有文件
            foreach (FileInfo fileInfo in directoryInfo.GetFiles())
            {
                string fileExtension = fileInfo.Extension.ToLower();

                // 只处理LRC和TXT格式文件
                if (fileExtension == ".lrc" || fileExtension == ".txt")
                {
                   



                    //DetectEncoding(fileInfo.FullName);
                    //DetectEncoding2(fileInfo.FullName);
                    Encoding encoding = DetectEncoding3(fileInfo.FullName);

                    if (encoding == null || encoding.EncodingName.Equals("简体中文(GB18030)"))
                    {
                        Log("默认File:" + fileInfo.FullName);
                    }
                    else
                    {
                        // 读取文件内容
                        string fileContent = File.ReadAllText(fileInfo.FullName);

                        // 将文件编码改为ANSI
                        File.WriteAllText(fileInfo.FullName, fileContent, Encoding.GetEncoding("gbk"));
                        Log("转换File:" + fileInfo.FullName);
                    }
                    count++;

                }
            }

            Log("共有"+ count + "个相关文件,编码转换为ANSI:成功");
        }
         Encoding DetectEncoding(string filePath)
        {
            Encoding encoding = null;
            using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {

                byte[] bom = new byte[4];
                fileStream.Read(bom, 0, 4);
                Log(Convert.ToString(bom[0], 16) + " " + Convert.ToString(bom[1], 16) + " " + Convert.ToString(bom[2], 16) + " " + Convert.ToString(bom[3], 16) + " ");
                // 根据文件头部的字节序列判断编码
                if (bom[0] == 0xef && bom[1] == 0xbb && bom[2] == 0xbf)
                {
                    encoding= Encoding.UTF8;
                }
                else if (bom[0] == 0xfe && bom[1] == 0xff)
                {
                    encoding = Encoding.Unicode; // UTF-16 Little Endian
                }
                else if (bom[0] == 0xff && bom[1] == 0xfe)
                {
                    encoding = Encoding.BigEndianUnicode; // UTF-16 Big Endian
                }
                else if (bom[0] == 0 && bom[1] == 0 && bom[2] == 0xfe && bom[3] == 0xff)
                {
                    encoding = Encoding.UTF32;
                }
                else
                {
                    encoding = Encoding.Default;
                }
                Log("文件编码1:" + encoding.EncodingName);
                return encoding;
            }         
        }

        Encoding DetectEncoding2(string filePath)
        {
            Encoding encoding2 = null;
            using (StreamReader reader = new StreamReader(filePath, detectEncodingFromByteOrderMarks: true))
            {
                // 获取读取器的当前编码
                encoding2 = reader.CurrentEncoding;
                Log("文件编码2:"+encoding2.EncodingName);
            }

            return encoding2;
        }
        Encoding DetectEncoding3(string filePath)
        {
            Encoding encoding = null;
            using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                // 创建字符集识别器
                CharsetDetector detector = new CharsetDetector();
                // 检测文件的字符编码
                detector.Feed(fileStream);
                detector.DataEnd();

                if (detector.Charset != null)
                {
                    //Log("文件编码3:" + detector.Charset);
                    encoding = Encoding.GetEncoding(detector.Charset);
                }
                else
                {
                    //Log("无法识别文件的编码");
                }
                return encoding;
            }
        }
    }
}

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

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

相关文章

CSDN今日热榜词云图

文章目录 C云原生人工智能和Python前沿技术软件工程后端javajavascriptphp区块链大数据移动开发嵌入式开发工具数据结构与算法微软技术测试游戏网络运维 C C果然还是应试语言,真题的占比竟然这么大。C之所以没出现,很有可能是在做词云的时候把加号当作非…

多人联机对战游戏赛道,你准备好了吗?

用户日益增长的精神需求和社交娱乐需要,让联机对战的需求与日剧增。 硬件和网络技术的高速发展,也使得联机游戏的体验越来越好。 可以看到,越来越多的联机对战游戏登上游戏榜单。 联机对战已逐渐成为主流,无论在哪个游戏榜单&…

二,MySQL数据库主从复制的介绍及搭建(收藏)

一,介绍概述 主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。 DDL:数据定义语言,用…

HRS--人力资源系统(Springboot+vue)--打基础升级--(二)写个主菜单导航界面

1. 华为OD机考题 答案 2023华为OD统一考试(AB卷)题库清单-带答案(持续更新) 2023年华为OD真题机考题库大全-带答案(持续更新) 2. 面试题 一手真实java面试题:2023年各大公司java面试真题汇总--…

计算机 数进制转换;存储MB与带宽Mbps

参考:https://zhuanlan.zhihu.com/p/459817484 1、计算机 数进制转换 1)与十进制相关的转换 2)与二进制相关的转换 二进制是Binary,简写为B;八进制是Octal,简写为O;十进制是Decimal&#xff…

117页数字化转型与产业互联网发展趋势及机会分析报告PPT

导读:原文《》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 喜欢文章,您可以点赞评论转发本文,了解更多内容请私信:方…

Ubuntu16.04-ros-kinetic环境搭建笔记=1=

tips:搬运资料,留个记录 安装Ubuntu Ubuntu官网下载地址 安装 虚拟机安装Ubuntu 最好断网安装Ubuntu,可以节约时间 Ubuntu基础设置 Ubuntu换国内源 换成清华源 sudo apt upgradeVMwareTool安装 把这个压缩包拖到桌面,否则只读…

PyTorch翻译官网教程-TEXT CLASSIFICATION WITH THE TORCHTEXT LIBRARY

官网链接 Text classification with the torchtext library — PyTorch Tutorials 2.0.1cu117 documentation 使用torchtext库进行文本分类 在本教程中,我们将展示如何使用torchtext库来构建用于文本分类分析的数据集。 使用迭代器访问原始数据构建数据处理管道…

JAVA基础知识(四)——面向对象(上)

面向对象(上) 一、面向对象的概念1.1 何谓“面向对象”的编程思想1.2 面向过程(POP)与面向对象(OOP)1.3 面向对象的思想概述 二、类和对象2.1 面向对象的思想概述 三、对象的创建和使用3.1 设计类以及类和对象的使用3.2 类和对象 四、类的成员之一&#…

leetcode 125.验证回文串

⭐️ 题目描述 🌟 leetcode链接:https://leetcode.cn/problems/valid-palindrome/ 思路: 这道题只判断字符串中的字母与数字是否是回文。虽然小写大写字母可以互相转换,但是里面是含有数字字符的,所以先统一&#xff…

solr快速上手:聚合分组查询|嵌套分组指南(十二)

0. 引言 solr作为搜索引擎经常用于各类查询场景,我们之前讲解了solr的查询语法,而除了普通的查询语法,有时我们还需要实现聚合查询来统计一些指标,所以今天我们接着来查看solr的聚合查询语法 1. 常用聚合查询语法 以下演示我们…

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)

开个新坑详细分析一下虚幻官方发布的《CropOut》,文章会同步发布到我在知乎|CSDN的专栏里 文章目录 概要Create Island几何体生成部分随机种子Step 1Step 2Step 3Step 4Step 5Step 6 岛屿材质部分动态为草地设置颜色 程序设计的小技巧其它Platform Switch函数 概要 …

Python接口自动化测试实战教程

接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。 1、接口自动化测试框架 在Python接口自动化测试中,我们…

TEE OS中使用secure timer

我们知道Arm的架构设计中,timer这一块是有缺陷的:Timer的TVAL功能不能同时给EL3和S-EL1使用,这是硬件的设计。在ATF和TEE OS的代码中,只能有一处使用,并且也需要设计者实现提前约定好。 好在大多数的TEE OS 都不会去使…

Amazon CloudFront 部署小指南(六)- Lambda@Edge 基础与诊断

内容简介 本文适用于希望使用 Amazon CloudFront LambdaEdge 提升 Amazon CloudFront 边缘计算能力的用户,旨在帮助您更好的进行 CloudFront LambdaEdge 的开发、调试、测试、部署等工作。 首先我们会对 CloudFront LambdaEdge 做个简单的介绍,然后分七个…

干货|工作中要使用Git,看这篇文章就够了

本文将从 Git 入门到进阶、由浅入深,从常用命令、分支管理、提交规范、vim 基本操作、进阶命令、冲突预防、冲突处理等多方面展开,足以轻松应对工作中遇到的各种疑难杂症,如果觉得有所帮助,还望看官高抬贵手给个赞呗,感…

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)效…

第16集丨一起创建Vue脚手架吧

目录 一、安装Vue CLI1.1 配置 npm 淘宝镜像1.2 全局安装1.3 验证是否成功 二、创建vue_test项目2.1 cmd进入桌面2.2 创建项目2.3 运行项目2.4 查看效果 三、脚手架结构分析3.1 文件目录结构分析3.2 vscode终端打开项目 一、安装Vue CLI CLI:command-line interface…

re学习(33)攻防世界-secret-galaxy-300(脑洞题)

下载压缩包: 下载链接:https://adworld.xctf.org.cn/challenges/list 参考文章:攻防世界逆向高手题之secret-galaxy-300_沐一 林的博客-CSDN博客 发现这只是三个同一类型文件的三个不同版本而已,一个windows32位exe&#xff0…

VBA技术资料MF45:VBA_在Excel中自定义行高

【分享成果,随喜正能量】可以不光芒万丈,但不要停止发光。有的人陷入困境,不是被人所困,而是自己束缚自己,这时"解铃还须系铃人",如果自己无法放下,如何能脱困? 。 我给V…