3つの方法は、WPFのプロジェクトは、1つのファイルを生成するために聞かせて

オリジナル: 3つの方法が1つのファイルを生成するために、WPFプロジェクトを作成するには

いくつかの小さなツールを作成するためにWPFを使用するときは、多くの場合、あなたは1つのファイルを生成するために、EXEファイルに複数のDLLファイルを埋め込む必要があります。ここでは3つのオプションがあります:

  • 埋め込みリソースとしてDLLファイル
  • 使用Costura.Fody
  • 使用.NET原子炉。

まず、埋め込まれたリソースDLLにファイルを変換します

新しいプロジェクトの最初のステップResourcesフォルダには、所望のディレクトリDLL(DLLファイルは複数であってもよい)にファイルをコピーし、各ファイルのプロパティ変更生成動作埋め込まれたリソースたとえば、。

6141703-e7b1f4709db6b2db.png
DLLファイルをコピーします。
6141703-38e83a734ec33361.png
変更発生動作

第二ステップ、変更 App.xaml.cs 、ファイルを組み立て解像度失敗したイベントを追加し、指定された埋め込みリソースをロードします。変更内容:


  
  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Configuration;
  4. using System.Data;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Reflection;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. namespace Embed
  11. {
  12. /// <summary>
  13. /// App.xaml 的交互逻辑
  14. /// </summary>
  15. public partial class App : Application
  16. {
  17. readonly string[] dlls = new string[] { "Newtonsoft.Json" }; // 去掉后缀名
  18. public App()
  19. {
  20. AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
  21. }
  22. private System.Reflection. Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
  23. {
  24. string resources = null;
  25. foreach ( var item in dlls)
  26. {
  27. if (args.Name.StartsWith(item))
  28. {
  29. resources = item + ".dll";
  30. break;
  31. }
  32. }
  33. if ( string.IsNullOrEmpty(resources)) return null;
  34. var assembly = Assembly.GetExecutingAssembly();
  35. resources = assembly.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(resources));
  36. if ( string.IsNullOrEmpty(resources)) return null;
  37. using (Stream stream = assembly.GetManifestResourceStream(resources))
  38. {
  39. if (stream == null) return null;
  40. var block = new byte[stream.Length];
  41. stream.Read(block, 0, block.Length);
  42. return Assembly.Load(block);
  43. }
  44. }
  45. }
  46. }

ここでdllsのコンテンツの配列Resourcesディレクトリは、ファイル名の接尾辞を削除します。例えば、ResourcesそこにディレクトリNewtonsoft.Json.dllMaterialDesignThemes.Wpf.dll及びMaterialDesignColors.dllその後dllsコンテンツのアレイ

readonly string[] dlls = new string[] { "Newtonsoft.Json" , "MaterialDesignThemes.Wpf" , "MaterialDesignColors"}; 

 
 

最後に、ディレクトリ内のdllファイルを生成、削除、プロジェクトを再構築します。

第二に、使用Costura.Fody

Costura.Fodyを使用する非常に単純な、リソース参照ライブラリファイルとして埋め込むことができ、直接Costura.Fodyインストールすることができます。

PM> Install-Package Costura.Fody

 
 

簡単な例を取るには:

  1. 新しいWPFプロジェクトを作成し、Newtonsoft.Jsonを追加します。PM> Install-Package Newtonsoft.Json
  2. インストールCostura.Fody
  3. プロジェクトをビルドします

次のように生成結果は以下の通りでした。

6141703-f78c18cf8fd3f3ce.png
結果を生成Costura.Fody
Costura.Fodyリンク: https://github.com/Fody/Costura

第三に、.NET原子炉の使用

依存走査を有し、アセンブリ埋め込みながら.NET炉は、.NETコードの暗号化難読化ツールです。
具体的な使用手順:

  1. WPFプロジェクト生成されたexeファイルを開きます。
  2. クリックしてスキャン依存関係のボタンを。
  3. チェックすべてのアセンブリに埋め込まれました
  4. クリックして保護することができます。
    6141703-de34781569f60b96.png
    使用プロセス
    次のように生成結果は以下の通りでした。
    6141703-b97849d0214f74c7.png
    結果を生成します

一般に、上記の3つの方法は、単一のファイルを生成し、DLLのリソースを埋め込むことができます。Costura.Fody .NET原子炉で使いやすく、最小限の変更。暗号化要件がある場合は、.NET原子炉を使用することをお勧めします。

免責事項:この記事は「txflyのオリジナルの記事で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンク:https://www.jianshu.com/p/72534a7e2f4a

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12208816.html