C# 嵌入dll 的方法

在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形式总归让人不爽,那么有办法让生成的软件中直接就包含这个dll文件吗,这样就可以不用dll跟着exe走了,避免单独不能运行的情况。

答案是有的!

在工程项目目录下找到Resources.resx文件并点击,然后按下面操作,添加资源,将你要加入的dll添加进来。

操作完成后,就会在下面的内容框里看到你添加进来的dll。

然后在工程中加入下面这个函数代码:

 System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
      string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");
      dllName = dllName.Replace(".", "_");
      if (dllName.EndsWith("_resources")) return null;
      System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());
      byte[] bytes = (byte[])rm.GetObject(dllName);
      return System.Reflection.Assembly.Load(bytes);
    }

在InitializeComponent();之前调用。这样生成的exe就包含这个dll文件啦。

public Form1()
    {
      this.StartPosition = FormStartPosition.CenterScreen;
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
      InitializeComponent();
    }

总结

以上所述是小编给大家介绍的C# 嵌入dll 的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

(0)

相关推荐

  • C# 编译生成dll文件供程序调用的两种方法

    一.使用vs2017 创建动态dll文件 方法一: 1.新建-项目-类库 2.创建一个.cs文件 写入代码,例如:建立一个Windows窗体 略丑,简单明了... using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System

  • C#连接Oracle数据库使用Oracle.ManagedDataAccess.dll

    在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了.在那时没有ODP.NET,但visual studio却对Oralce数据库的调用进行了集成,就是下图中的这个,尽管现在使用这个的时候visual studio提醒过时的,但在那时却是非常好用的. 为什么现在visual studio中这个程序集依然能使用,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll进行本文的重点呢? 1.visual s

  • 利用unity代码C#封装为dll的步骤分享

    前言 本文主要介绍了关于unity代码C#封装为dll的相关内容,分享出来供需要的朋友们学习,下面话不多说了,来一起学习学习吧. 方法如下 1 Visual studio软件打开后创建一个项目 2并选择类库类型 3编写简单的代码看看效果(发现会报错),主要是没有添加类库,以及using UnityEngine;引用空间 4添加类库,引用空间 发现依然会报错,这就需要添加应用库unityengine.dll,方法如下 找到安装unity目录下的UnityEngine.dll,添加后你就会发现,报红

  • C# [ImportDll()] 知识小结

    这周在做公司的一个C#项目中,要写一个webservice提供一个下载方法,之前公司有过,但是要整改,于是这种鸟屎摊子又交给了我,其中一个密文流的下载中要应用我们小组另一伙人用C++写的四个dll, 这些DLL是由我们自己编写的,非.NET 托管,这是一个麻烦事: 如果用 IDE往工程里add reference时,它会提示这几个dll是没有注册的,不是.NET托管的.好吧,顺便补充一下.NET托管和非托管. 具体官方术语是: 托管DLL就是能够在公共语言运行库(Common Language

  • c#的dllimport使用方法详解

    DllImport是System.Runtime.InteropServices命名空间下的一个属性类,其功能是提供从非托管DLL导出的函数的必要调用信息 DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称.DllImport的定义如下: 复制代码 代码如下: [AttributeUsage(AttributeTargets.Method)]public class DllImportAttribute: System.Attribute{public DllImportA

  • C#使用反射(Reflect)获取dll文件中的类型并调用方法

    使用反射(Reflect)获取dll文件中的类型并调用方法,具体内容如下 需引用:System.Reflection; 1. 使用反射(Reflect)获取dll文件中的类型并调用方法(入门案例) static void Main(string[] args) { //dll文件路径 string path = @"D:\VS2015Project\001\Computer\bin\Debug\computer.dll"; //加载dll文件 Assembly asm = Assemb

  • C#调用易语言写的Dll文件方法

    本人是用易语言起步的,起初是为了兴趣,后来由于易语言被杀软误杀严重,连空白程序都杀,后来转到了学C#,随着学习的深入,接触越来越复杂的东西之后,发现有些功能没有用易语言来写方便,所以就想到用C#来调用易语言写的DLL,就和一般的Dll调用一样,没什么技术含量. 易语言中新建个Dll文件 C#中和一般的DLL一样调用 <p>using System; using System.Collections.Generic; using System.ComponentModel; using Syst

  • C#如何通过probing指定dll寻找文件夹详解

    前言 我们在很大的项目开发,会发现项目引用的 dll 会很多,我想要按照不同的功能,将不同的 dll 放在不同的文件夹 简单的方法是通过修改 App.config 文件指定文件夹,如将文件移动到 abc\12 的文件夹里面,可以在 App.config 添加代码 <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding

  • C#使用DllImport调用非托管的代码的方法

    找到GetShortPathName的方法签名, DWORD GetShortPathName(LPCTSTR tpszLongPath,TPTSTR lpszShortPath,DWORD cchBuffer): 非托管及托管数据类型对应关系: LPCTSTR         String LPTSTR           StringBuilder DWORD          int DllImport的导入规则: 1.方法名与Win API完全一样.如果在C#中调用时显示完全不同的方法名

  • java使用jna调用c#中dll的方法详解

    前言 JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码.开发人员只要在一个java接口中描述目标native library的函数与结构,JNA将自动实现Java接口到native function的映射. 优点 JNA可以让你像调用一般java方法一样直接调用本地方法.就和直接执行本地方法差不多,而且调用本地方法还不用额外的其他处理或者配置什么的,

随机推荐