我想知道如何在程序中压缩我的dll文件,然后在运行程序时从程序中提取文件,以便程序可以使用它们,当程序关闭时,文件被压缩回来了。
答案 0 :(得分:0)
您可以使用ZipArchive类。
答案 1 :(得分: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时触发
使用上述方法从应用程序资源加载程序集。
答案 2 :(得分:0)
取自Jeffrey Richters blog。这将从程序资源加载程序集,因此只需要运行所需的可执行文件。
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);
}
};