いくつかの小さなツールを作成するためにWPFを使用するときは、多くの場合、あなたは1つのファイルを生成するために、EXEファイルに複数のDLLファイルを埋め込む必要があります。ここでは3つのオプションがあります:
- 埋め込みリソースとしてDLLファイル
- 使用Costura.Fody
- 使用.NET原子炉。
まず、埋め込まれたリソースDLLにファイルを変換します
新しいプロジェクトの最初のステップResources
フォルダには、所望のディレクトリDLL(DLLファイルは複数であってもよい)にファイルをコピーし、各ファイルのプロパティ変更生成動作に埋め込まれたリソースたとえば、。
第二ステップ、変更
App.xaml.cs
、ファイルを組み立て解像度失敗したイベントを追加し、指定された埋め込みリソースをロードします。変更内容:
-
using System;
-
using System.Collections.Generic;
-
using System.Configuration;
-
using System.Data;
-
using System.IO;
-
using System.Linq;
-
using System.Reflection;
-
using System.Threading.Tasks;
-
using System.Windows;
-
-
namespace
Embed
-
{
-
/// <summary>
-
/// App.xaml 的交互逻辑
-
/// </summary>
-
public
partial
class
App :
Application
-
{
-
readonly
string[] dlls =
new
string[] {
"Newtonsoft.Json" };
// 去掉后缀名
-
public App()
-
{
-
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
-
}
-
-
private System.Reflection.
Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
-
{
-
string resources =
null;
-
foreach (
var item
in dlls)
-
{
-
if (args.Name.StartsWith(item))
-
{
-
resources = item +
".dll";
-
break;
-
}
-
}
-
if (
string.IsNullOrEmpty(resources))
return
null;
-
-
var assembly = Assembly.GetExecutingAssembly();
-
resources = assembly.GetManifestResourceNames().FirstOrDefault(s => s.EndsWith(resources));
-
-
if (
string.IsNullOrEmpty(resources))
return
null;
-
-
using (Stream stream = assembly.GetManifestResourceStream(resources))
-
{
-
if (stream ==
null)
return
null;
-
var block =
new
byte[stream.Length];
-
stream.Read(block,
0, block.Length);
-
return Assembly.Load(block);
-
}
-
}
-
}
-
}
ここでdlls
のコンテンツの配列Resources
ディレクトリは、ファイル名の接尾辞を削除します。例えば、Resources
そこにディレクトリNewtonsoft.Json.dll
、MaterialDesignThemes.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
簡単な例を取るには:
- 新しいWPFプロジェクトを作成し、Newtonsoft.Jsonを追加します。
PM> Install-Package Newtonsoft.Json
- インストールCostura.Fody
- プロジェクトをビルドします
次のように生成結果は以下の通りでした。
第三に、.NET原子炉の使用
依存走査を有し、アセンブリ埋め込みながら.NET炉は、.NETコードの暗号化難読化ツールです。
具体的な使用手順:
- WPFプロジェクト生成されたexeファイルを開きます。
- クリックしてスキャン依存関係のボタンを。
- チェックすべてのアセンブリに埋め込まれました。
- クリックして保護することができます。
一般に、上記の3つの方法は、単一のファイルを生成し、DLLのリソースを埋め込むことができます。Costura.Fody .NET原子炉で使いやすく、最小限の変更。暗号化要件がある場合は、.NET原子炉を使用することをお勧めします。
免責事項:この記事は「txflyのオリジナルの記事で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンク:https://www.jianshu.com/p/72534a7e2f4a