将dll文件嵌入exe程序

Posted applebox

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将dll文件嵌入exe程序相关的知识,希望对你有一定的参考价值。

最近在开发一个安装程序, 需要将dll文件嵌入到exe中, 保证编译出来的程序只有一个 .exe 文件

  1. 首先定义个函数用来动态获取dll文件

private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
     string resourceName = "MyProject." + new AssemblyName(args.Name).Name + ".dll";
     using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
     {
          byte[] assemblyData = new byte[stream.Length];
          stream.Read(assemblyData, 0, assemblyData.Length);
          return Assembly.Load(assemblyData);
     }
}

  2. 在Main函数中 添加一行代码, 在程序解析程序集失败事件触发时 调用上面的方法动态加载程序集

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

  3. 将需要嵌入的dll文件添加到工程中 在文件的属性面板中 生成操作属性修改为嵌入资源  否则在exe中将找不到该dll文件 

  技术图片

  4. 在项目的应用中仍然需要添加对该 dll文件的应用, 否则编译无法通过 , 但是将引用的dll文件的属性面板中 复制到本地的属性修改为 False, 

  技术图片

 

以上是关于将dll文件嵌入exe程序的主要内容,如果未能解决你的问题,请参考以下文章

C#将DLL嵌入到exe当中

如何防止引用程序集的嵌入式依赖项被复制到Visual Studio中的输出文件夹?

可以将 DLL 合并到 .NET EXE 中吗? [复制]

如何把dll嵌入到exe文件中

在可执行文件中使用嵌入式 .dll

如何在 VS 创建的 exe 中嵌入引用?