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

在 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 命令进行类似的操作。

C# 把dll打包到exe文件,真的可以 。文件批量转了ANSI编码_第1张图片

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

  C# 把dll打包到exe文件,真的可以 。文件批量转了ANSI编码_第2张图片

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;
            }
        }
    }
}

你可能感兴趣的:(c#,mfc,windows)