[リンク]エディターは操作の容易なドラッグ アンド ドロップ機能を備えているため、入力アセンブリを 1 つまたは複数の出力アセンブリに割り当てる設定をすばやく指定できます。 複数の出力アセンブリへのリンクを設定した場合は、各出力アセンブリのリンクを設定後に個別に構成できます。
[入力アセンブリ]および[リンク アセンブリ]
リンク用の出力アセンブリを作成および構成するには、次の手順に従います。
- [リンク アセンブリ]ツール バーの[新規のリンク アセンブリを作成します]ボタンをクリックします。 新しいアセンブリのエントリが、リンク アセンブリのリストに現れます。
- 新しい出力アセンブリの名前は、[リンクの詳細]セクションにある[出力アセンブリ]フィールドに入力して指定します。 パス情報の入力は必要ありません。出力アセンブリはすべて同様に、出力先ディレクトリへ書き込まれます。
- [入力アセンブリ]リストからリンクするアセンブリを選択し、それを[リンク アセンブリ]リスト内の新規アセンブリにドラッグします。 そうすると、[入力アセンブリ]リストから選択したアセンブリが消え、新規アセンブリの子ノードとして現れます。
- プライマリ アセンブリとしてマークする入力アセンブリを右クリックし、ショートカット メニューから[プライマリ アセンブリの設定]を選択します。 この操作は、プライマリ アセンブリを選択し、ツール バー ボタンを使用しても行えます。 プライマリ アセンブリはタグ アイコンで示されます。
- 必要に応じて、新規アセンブリに対して名前変換ポリシーおよびエントリ ポイントを設定できます。
- 作成する各出力アセンブリについて、以上の手順を繰り返します。
[リンク アセンブリ]リストからアセンブリを削除するには、目的のアセンブリを選択し、ツール バーの[選択したアセンブリの削除]ボタンを使用するか、または Delete キーを押します。
下のスクリーンショットは、リンクされた出力が複数ある場合の例を示しています。 最初に入力アセンブリの Driver.exe と LibraryC.dll が out.exe にリンクされ、次に LibraryA.dll と LibraryB.dll が outlib.dll にリンクされます。最後に、LibraryE.dll がリンクされないでパス スルーします。
プライマリ アセンブリ
リンクを設定する場合、入力アセンブリのうちの 1 つをプライマリ アセンブリとして指定する必要があります。 Dotfuscator は、新しく作成された出力アセンブリに、プライマリ アセンブリに格納されているマニフェスト情報(バージョン番号、公開キーなど)を適用します。
名前の改変
リンカーは、アセンブリの結合中、名前付けの衝突を防ぐために名前の変更が必要になる場合があります。 たとえば、2 つの入力アセンブリがまったく同じ名前のプライベート クラスを持っているかもしれません。その場合、アセンブリを結合するには、どちらかの名前を変更する必要があります。
ほとんどの場合、(元の名前のうち少なくとも 1 つが、そのアセンブリ外に公開されていない場合)Dotfuscator は名前を安全に改変できます。しかし、同じ名前の公開されている型が 2 つあることがわかった場合は、何らかの指示がなければ、どちらかの名前を安全に改変することはできません。 このような場合にのみ、名前変換ポリシーが使用されます。 既定値の動作では、エラー メッセージを表示してビルドが停止します。 その他のオプションでは、該当する名前の 1 つを改変して警告を発するか、あるいは該当する名前を警告なく改変します。
エントリ ポイントの設定
リンクされた出力アセンブリのエントリ ポイントを設定する必要がある場合は、[リンク]エディターの[エントリ ポイント]セクションにある[参照]ボタンによって表示される、[エントリ ポイントの選択]ダイアログ ボックスを使用できます。
このダイアログ ボックスには、リンクされた出力アセンブリで使用できるすべてのメソッドがグラフィカルに表示されます。 エントリ ポイントとして選択するメソッドにチェック マークを入れます。 このダイアログにより、[エントリ ポイント]セクションの残りの情報が埋められます。
エントリ ポイント
.NET では、実行可能なアセンブリは、メタデータ内にエントリ ポイントとマークされたメソッドを持っている必要があります(通常、このメソッドは Main
と呼ばれますが、名前は何でもかまいません)。 これは、アセンブリが実行されるときに CLR が呼び出すメソッドです。 ある場合には、リンクされている出力アセンブリごとにエントリ ポイントの指定が必要になります。 次の表は、エントリ ポイントの規則についてまとめてあります。
入力 | 出力 | エントリ ポイント規則 |
---|---|---|
すべての EXE | EXE | ユーザー指定のエントリ ポイントが必要です。リンクは、入力アセンブリ上のすべてのエントリ ポイントを削除し、出力アセンブリにユーザー指定のエントリ ポイントを適用します。 |
すべての DLL | EXE | ユーザー指定のエントリ ポイントが必要です。 |
EXE と DLL が混在 | EXE | 入力の exe が 1 つだけである場合を除き、ユーザー指定のエントリ ポイントが必要です。exe が 1 つの場合、リンクはそのエントリ ポイントを使用します。既定値は、ユーザー指定のエントリ ポイントによってオーバーライドされます。 |
任意 | DLL | リンカーは、入力アセンブリ上のすべてのエントリ ポイントを削除します。ユーザー指定のエントリポイントは、.NET Core アセンブリでのみ使用されます。 |