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

2 番目の方法:
(ファイルは書き込まれず、アセンブリでのみ可能)

AppDomain.AssemblyResolveDLL が見つからない場合に発生するイベントを使用できます。
上記の方法を使用して、アプリケーション リソースからアセンブリを読み込みます。

于 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 に答える