C# 如何将使用的Dll嵌入到.exe应用程序中?

这篇具有很好参考价值的文章主要介绍了C# 如何将使用的Dll嵌入到.exe应用程序中?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

有没有想自己开发的exe保留一点神秘,不想让他人知道软件使用了哪些dll; 又或许是客户觉得一个软件里面的dll文件太多了,能不能简单一点,直接双击.exe就可以直接运行了,别搞那么多乱七八糟的。无论是主动还是被动,这就产生了一个需求,如何将软件调用的dll嵌入到exe中呢?

详细实操

接下来介绍一下方法,亲测有效,已用于实际项目中。

我比较喜欢的方式是将软件的所有功能都已完成好了,最后再做这个dll嵌入功能。

1 、将需要用到的dll添加的项目的引用中
C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll
可以看到dll的【复制本地】默认值是True,
在做嵌入dll功能时,我们需要将【复制本地】值设置为False.
C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll

2、在项目中创建一个文件夹,用于存放用到的dll,比如我这里创建了MyDll的文件夹,将项目中用到的所有dll都放这里了。
鼠标右键选中文件夹【MyDll】–选择【添加】—【现有项】—选择所有文件,将文件夹下的Dll全部添加到工程中。
C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll
将MyDll文件下的所有文件属性【生成操作】选择嵌入的资源
C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll

3 重要的一步是动态加载dll的代码部分了。 新建一个类LoadDll用于映射解析dll.
其中InsertDllForm.MyDll是工程的命名空间+文件夹名称,需要自行替换为自己工程下的名称哈。

 class LoadDll
    {
        public static void LoadResourceDll()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        }

        private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string assName = new AssemblyName(args.Name).Name;
            string resName = "InsertDllForm.MyDll." + assName + ".dll";


            using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resName))
            {
                if (stream == null)
                {
                    return null;
                }
                Byte[] assemblyData = new Byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
        }
    }

4、最后一步,在Main函数入口调用加载dll的函数。 LoadDll.LoadResourceDll();

static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
           
            //加载解析嵌入的Dll
            LoadDll.LoadResourceDll();

            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }

简要步骤

1 添加引用,将需要用到的dll添加的项目的引用中,并设置属性【复制本地】为False

2 将引用放到一个文件夹下,并将里面的dll添加到工程,设置属性【生成操作】为嵌入的资源

3 使用反射Reflection,编写代码加载Dll的功能

4 主函数Main()调用加载Dll的功能 LoadResourceDll

C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll
结构如图。

测试项目运行如图所示。
C# 如何将使用的Dll嵌入到.exe应用程序中?,C#,c#,Winform,内嵌dll文章来源地址https://www.toymoban.com/news/detail-694814.html

到了这里,关于C# 如何将使用的Dll嵌入到.exe应用程序中?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • C#(.Net) 将非托管dll嵌入exe中

    C#(.Net) 将非托管dll嵌入exe中

    前往我的主页以获得更好的阅读体验 C#(.Net) 将非托管dll嵌入exe中 - DearXuan的主页 https://blog.dearxuan.com/2021/12/26/C-Net-%E5%B0%86%E9%9D%9E%E6%89%98%E7%AE%A1dll%E5%B5%8C%E5%85%A5exe%E4%B8%AD/ 托管dll实际上是指C#编写的dll,可以直接右键“引用”导入 而大部分情况下,我们需要引用C++写的dll,如果你

    2024年02月08日
    浏览(14)
  • 使用Electron打包vue文件变成exe应用程序

    使用Electron打包vue文件变成exe应用程序

    克隆下载Electron: 链接: electron-quick-start 1.下载之后安装Electron依赖 npm安装electron总失败使用下面的安装方式 2.安装打包运行 代码如下(示例): 代码如下(示例): 代码如下(示例): 打包后得路径修改成为./,避免Electron打包exe后显示空白 修改生产环境配置,配置为后端

    2024年01月24日
    浏览(13)
  • 使用PyInstaller将pyqt应用转换为exe程序,并设置图标

    在PyInstaller中, -i 选项用于指定生成的可执行文件的图标文件。通过使用 -i 选项,可以将一个图标文件与生成的可执行文件关联起来,使得可执行文件在操作系统中显示指定的图标。 具体使用方法如下: 其中, 图标文件路径 是要指定的图标文件的路径,可以是ICO格式的图

    2024年02月14日
    浏览(14)
  • PowerBI(一) : 如何将powerBI报表嵌入内部web应用程序?

    PowerBI(一) : 如何将powerBI报表嵌入内部web应用程序?

    最近做了一个PowerBI报表嵌入内部web应用系统的项目,分享一下主要步骤以及踩坑记录。 微软官网完整教程这里:https://learn.microsoft.com/zh-cn/power-bi/developer/embedded/embedded-analytics-power-bi 以下是我自己总结的主要步骤(仅供大家参考): 1. 你要付费买一个powerBI的账号。 2. 用这个

    2023年04月24日
    浏览(13)
  • C#控制台应用程序如何添加窗口关闭事件?

    C#控制台应用程序如何添加窗口关闭事件?

    公司有一个控制台应用程序,在关闭控制台应用程序窗口前,想处理一下业务逻辑。还有比如误操作关闭了,或者像消息队列启动了发送消息提醒,那关闭了窗口代表控制台应用销毁了,也需要发送消息通知。那这个时候添加关闭窗口事件就派上用场了。 很多小伙伴问,有没

    2024年02月13日
    浏览(14)
  • 在C# WinForms应用程序中安装,配置和使用MetroFramework

    在C# WinForms应用程序中安装,配置和使用MetroFramework

    1.通过NuGet安装框架 2.在工具箱中为Metro控件创建一个新选项卡 3.添加对Metro控件和字体的引用 4.使用框架 迄今为止, 还没有很多解决方案可以使用WinForms之类的工具在Windows桌面应用程序中创建动态用户界面。最著名的方法是实现CefSharp, 以便能够使用HTML, CSS和JavaScript设计界面。

    2024年02月07日
    浏览(16)
  • pyinstaller打包exe应用程序详细教程

    pyinstaller打包exe应用程序详细教程

    1、PyInstaller简介 PyInstaller是一个跨平台的Python应用打包工具,支持 Windows/Linux/MacOS三大主流平台,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,从而允许最终用户在无需安装 Python 的情况下执行应用程序。 PyInstaller 制作出来的执行文件并不是跨平台的,如果需

    2024年02月11日
    浏览(17)
  • C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

    初步掌握Windows应用程序的设计方法。 掌握常用窗体控件的使用方法。 1、设计一个Windows应用程序,创建一个用于添加学生个人基本信息的窗体,窗体下方法同时滚动信息“天行健,君子以自强不息!”。   要示如下: 如图1所示,设计窗体界面控件的布局 图1 学生信息管理

    2024年02月10日
    浏览(23)
  • C# 通过Costura.Fody把DLL合并到exe程序中

    C# 通过Costura.Fody把DLL合并到exe程序中

    打包独立的exe程序有多种方法,这里只说Costura.Fody。 我们用VS发布应用程序可以借助Costura.Fody直接打包成一个独立的exe程序,但是一些非托管的做了几次都没打进去,最后成功了,这里记录一下。 或者可以通过这里获取 https://github.com/Fody/Costura/tree/develop 我的版本是5.7.0安装好

    2024年02月06日
    浏览(11)
  • IDEA打包jar包,以及exe应用程序。

    IDEA打包jar包,以及exe应用程序。

    一、将IDEA中的java项目打包成jar包 ①点击菜单栏中的文件→项目结构 ②在项目结构窗口选择工件。点击添加,选择jar,选择来自有依赖项的模块 ③在【从模块创建JAR】对话框中,选择主类,点击确定 ④点击确定。 ⑤点击菜单栏中的构建,选择构建项目 ⑥点击菜单栏中的构

    2024年02月08日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包