返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >c#项目将dll打包到exe中的步骤
  • 619
分享到

c#项目将dll打包到exe中的步骤

2024-04-02 19:04:59 619人浏览 安东尼
摘要

目录意图:实现:1、将两个dll库文件作为资源文件添加进项目中;3、在程序入口Program类中调用上面的接口函数4、编译即可。意图: 想将项目用到的两个dll库文件(CryptEn

意图:

想将项目用到的两个dll库文件(CryptEnDe.dll和ICSharpcode.SharpZipLib.dll)一同编译进exe中,并编译后仅一个exe程序就可以独立运行不再需要其它文件。

实现:

1、将两个dll库文件作为资源文件添加进项目中;

2、添加功能代码


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.IO;
 
 
namespace AutoUpdateServer.Core
{
  /// <summary> 载入资源中的动态链接库(dll)文件
  /// </summary>
  static class LoadResourceDll
  {
    static Dictionary<string, Assembly> Dlls = new Dictionary<string, Assembly>();
    static Dictionary<string, object> Assemblies = new Dictionary<string, object>();
 
 
    static Assembly AssemblyResolve(object sender, ResolveEventArgs args)
    {
      //程序集
      Assembly ass;
      //获取加载失败的程序集的全名
      var assName = new AssemblyName(args.Name).FullName;
      //判断Dlls集合中是否有已加载的同名程序集
      if (Dlls.TryGetValue(assName, out ass) && ass != null)
      {
        Dlls[assName] = null;//如果有则置空并返回
        return ass;
      }
      else
      {
        throw new DllNotFoundException(assName);//否则抛出加载失败的异常
      }
    }
 
 
    /// <summary> 注册资源中的dll
    /// </summary>
    public static void ReGIStDLL()
    {
      //获取调用者的程序集
      var ass = new StackTrace(0).GetFrame(1).GetMethod().Module.Assembly;
      //判断程序集是否已经处理
      if (Assemblies.ContainsKey(ass.FullName))
      {
        return;
      }
      //程序集加入已处理集合
      Assemblies.Add(ass.FullName, null);
      //绑定程序集加载失败事件(这里我测试了,就算重复绑也是没关系的)
      AppDomain.CurrentDomain.AssemblyResolve += AssemblyResolve;
      //获取所有资源文件文件名
      var res = ass.GetManifestResourceNames();
      foreach (var r in res)
      {
        //如果是dll,则加载
        if (r.EndsWith(".dll", StrinGComparison.OrdinalIgnoreCase))
        {
          try
          {
            if (r.Contains("CryptEnDe.dll") 
              || r.Contains("CryptEnDe_d.dll"))
            {
              ExtractResourceToFile(r, PathUtils.GetUpdateDllPath() + @"/" + r.Substring(r.IndexOf('.') + 1));
            }
 
 
            var s = ass.GetManifestResourceStream(r);
            var bts = new byte[s.Length];
            s.Read(bts, 0, (int)s.Length);
            var da = Assembly.Load(bts);
            //判断是否已经加载
            if (Dlls.ContainsKey(da.FullName))
            {
              continue;
            }
            Dlls[da.FullName] = da;
          }
          catch(Exception e)
          {
            //加载失败就算了...
          }
        }
      }
    }
 
 
    private static void ExtractResourceToFile(string resourceName, string filename)
    {
      //if (!System.IO.File.Exists(filename))
      {
        using (System.IO.Stream s = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
        {
          using (System.IO.FileStream fs = new System.IO.FileStream(filename, System.IO.FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite))
          {
            byte[] b = new byte[s.Length];
            s.Read(b, 0, b.Length);
            fs.Write(b, 0, b.Length);
          }
        }
      }
    }
 
 
  }
}

其中PathUtils.GetUpdateDllPath()函数为获取dll释放的路径,根据自己需要指定路径


public static string GetUpdateDllPath()
{
  string strPath = @"C:/LTShiyi/cache/updatedll";
  if (!Directory.Exists(strPath))
  {
    Directory.CreateDirectory(strPath);
  }
 
   return strPath;
}

3、在程序入口Program类中调用上面的接口函数


static Program()
{
  AutoUpdateServer.Core.LoadResourceDll.RegistDLL();
}

4、编译即可。

以上就是C#项目将dll打包到exe中的步骤的详细内容,更多关于c# dll打包到exe的资料请关注编程网其它相关文章!

--结束END--

本文标题: c#项目将dll打包到exe中的步骤

本文链接: https://lsjlt.com/news/122819.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • c#项目将dll打包到exe中的步骤
    目录意图:实现:1、将两个dll库文件作为资源文件添加进项目中;3、在程序入口Program类中调用上面的接口函数4、编译即可。意图: 想将项目用到的两个dll库文件(CryptEn...
    99+
    2024-04-02
  • c#项目将dll打包到exe中的步骤是什么
    这篇文章将为大家详细讲解有关c#项目将dll打包到exe中的步骤是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。意图:想将项目用到的两个dll库文件(CryptEnDe.dll和ICSharpCode...
    99+
    2023-06-14
  • 将java项目打包成exe可执行文件的完整步骤
    目录如何使用exe4j把jar打包成exe文件一、将java程序打包成jar包二、将打包后的jar包打包成exe可执行文件总结如何使用exe4j把jar打包成exe文件 最近,做了几...
    99+
    2024-04-02
  • 将java普通项目打包成exe可执行文件的步骤记录
    前言 · 提示,无论打包成jar还是exe程序,运行都需要JDK,需要给没有安装JDK的电脑安装;不会安装JDK的朋友可以参考这篇文章:https://www.jb51.net/ar...
    99+
    2024-04-02
  • C#如何将DLL打包到程序中
    目录C#将DLL打包到程序中举例总结C#将DLL打包到程序中 有时候我们的程序中包含一些添加的DLL文件,使用起来不方便,我们可以把这些DLL文件打包到程序集中,只剩下一个EXE文...
    99+
    2023-01-28
    C#打包DLL C# DLL打包程序 将DLL打包到程序中
  • C#将dll打包到程序中的具体实现
    直接进入主题 先来看一个栗子,假设现在有一个第三方dll 复制代码 代码如下:namespace TestLibrary1{    public cla...
    99+
    2022-11-15
    C# dll 打包到程序
  • 怎么将python项目打包成exe与安装包
    这篇文章主要介绍“怎么将python项目打包成exe与安装包”,在日常操作中,相信很多人在怎么将python项目打包成exe与安装包问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么将python项目打包成e...
    99+
    2023-06-25
  • Vue项目打包部署到GitHubPages的实现步骤
    目录前言前期准备重要说明步骤1步骤2步骤3步骤4步骤5步骤6前言 关于什么是github pages?怎样创建github 仓库上传本地项目到GitHub远程仓库?等基本操作本文不再...
    99+
    2024-04-02
  • Qt项目打包的实现步骤
    目录准备项目文件用InstallShield解决打包后自动启动cmd窗口的问题准备项目文件 本质上就是把依赖的动态库放到你指定的文件夹里面去;这样在其他电脑上运行时,就不需要再安装q...
    99+
    2024-04-02
  • 将python项目打包成exe与安装包的全过程
    目录一.打包Flask项目1.1自己写个Flask2.2 下载pyinstaller2.3 进入到项目路径下,执行2.4 运行exe,测试二.使用nsis把文件夹打包成windows...
    99+
    2024-04-02
  • pyinstaller打包django项目的实现步骤
    安装pyinstaller pip install pyinstaller 制作项目的.spec文件   进入django项目所在路径,运行 pyi-makes...
    99+
    2024-04-02
  • electron打包vue项目的方法步骤
    目录创建项目添加electron-builderelectron下载失败窗体运行打包exe白屏创建项目 点击这里 添加electron-builder 1、在项目目录下运行命令:vu...
    99+
    2024-04-02
  • go项目打包部署的完整步骤
    目录1.go项目在window下编译简易打包2.项目在window下打包成其他系统可运行的文件3.项目在Mac下打包成其他系统可运行的文件5.使用goreleaser多平台打包总结1...
    99+
    2024-04-02
  • SpringBoot项目打jar包与war包的详细步骤
    目录一. SpringBoot项目打war包二. SpringBoot项目打jar包总结背景:使用Idea编辑器 一. SpringBoot项目打war包 步骤: 在pom.xml文...
    99+
    2023-02-24
    springboot 打jar包 java打war包命令 为什么要打war包
  • 怎么将pyqt5项目打包成exe可执行文件
    怎么将pyqt5项目打包成exe可执行文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。安装python3.6转exe会遇到很多问题,其中部分是由于python版本不合适引...
    99+
    2023-06-15
  • vue项目打包后部署到服务器的详细步骤
    耽误了几天, 终于开始写第二篇博客了, 这篇会讲怎么将vue项目打包部署到服务器, 其实和上一篇的uni-app步骤一样的, 就是最后多了一步修改nginx配置, 好 , 上操作 一...
    99+
    2024-04-02
  • 将Python代码打包成.exe可执行文件的完整步骤
    前言 有时候我们需要将自己写的代码打包成exe文件,给别人使用需要怎么办呢?以下将讲解Python代码如何打包成.exe文件。 1. 下载pyinstaller PyInstalle...
    99+
    2024-04-02
  • 使用eclipse打包Maven项目的实现步骤
    Maven中最重要的是POM文件,其打包也是基于该文件的,在POM文件中配置插件,可以实现将Maven项目打包成可执行jar包 依赖如下: <build> <p...
    99+
    2024-04-02
  • 手把手教你使用electron将vue项目打包成exe
    目录一、前言二、实现方法1.跑通示例代码 electron-quick-start2.打包自己的 vue 项目3.将vue项目整合到示例代码中打包exe总结一、前言 node.js ...
    99+
    2023-01-10
    vue项目打包exe Vue项目打包工具 electron vue项目
  • 通过IDEA将java程序或者项目打包为jar包(详细步骤)
    通过IDEA将java程序或者项目打包为jar包 文章目录 目录 文章目录 一、使用java语言,编写一个字典(Dict)Demo 二、将Dict程序打包为jar包 一、使用java语言,编写一个字典(Dic...
    99+
    2023-09-01
    java intellij-idea jar
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作