程序dll合并和取消合并

本文关键字:合并 取消 程序 dll | 更新日期: 2023-09-27 18:21:16

我想知道如何在程序中压缩dll文件,然后在程序运行时从程序中提取文件,以便程序可以使用它们,当程序关闭时,文件会被压缩回。

程序dll合并和取消合并

如果我理解正确,您希望隐藏DLL。

第一种方式:

1) 将DLL作为资源包含在项目中(exe)
2) 实现这样的方法:

public static void ResourceToFile(string fileName, string dir, byte[] resource) {
    Directory.CreateDirectory(dir);
    string path = Path.Combine(dir, fileName);
    File.WriteAllBytes(path, resource);
}

3) 调用如下:(在应用程序启动时,在使用dll之前)

ResourceToFile("xyz.dll", Application.StartupPath, Resources.xyzLib);

第二种方式:
(未写入任何文件,仅适用于程序集)

您可以使用AppDomain.AssemblyResolve事件,该事件在找不到DLL时触发
使用以上方法从应用程序资源加载程序集。

您可以使用ZipArchive类来实现这一点。

摘自Jeffrey Richters博客。这将从程序资源加载程序集,因此只需要运行可执行文件。

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
   String resourceName = "AssemblyLoadingAndReflection." +
      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);
   }
};