1

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

4

3 回答 3

0

如果我理解正确,您希望隐藏您的 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 时触发的事件。
使用上述方法从应用程序资源加载程序集。

于 2013-07-07T12:42:17.540 回答
0

您可以为此使用ZipArchive类。

于 2013-07-07T10:34:35.137 回答
0

取自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);

   }

}; 
于 2013-07-07T15:15:26.270 回答