web-dev-qa-db-ja.com

複数のアセンブリを1つにマージする方法は?

EXEプロジェクト(Azureアプリケーションの起動タスク)を使用してサービススタックを使用します。次のサービススタックのDLLおよび一部のAzureのDLLをEXEプロジェクトにコピーしました。

dlls

このEXEプロジェクトをビルドすると、Azure DLLはEXEにバンドルされますが、サービススタックのDLLはEXEにバンドルされません。マシンでEXEを実行するには、すべてのサービススタックのDLL手動。

このサービススタックのdllを使用して使用しました

JsonServiceClient client = new JsonServiceClient(servicepath);

これらすべてのDLLをEXEにバンドルするにはどうすればよいですか?

79
Arun Rana

いくつかのオプションがあります:

  • ILMerge (無料)を使用
    ハウツーについては here および here をご覧ください

OR

  • SmartAssembly (商用)のようなツールを使用します
    他のものの中に埋め込み、マージできます(ソースコードを変更する必要はありません)

OR

  • 10行未満で自分でコーディングする (無料だが最小限のソースコード変更)
    必要なすべての依存関係を「埋め込みリソース」としてマークします-このように、それらはEXEファイルに含まれます...実行時に読み取る AssemblyResolve ハンドラーをセットアップする必要がありますリソースから必要なDLLを.NETランタイムに返します...
113
Yahia

探しているツールは ILMerge と呼ばれます。これはコマンドラインツールであり、次のように使用できます。

ilmerge /target:winexe /out:MyApp.exe 
        MyExe.exe ServiceStack.dll ServiceStack.Interfaces.dll ServiceStack.ServiceInterface.dll  ServiceStack.Text.dll

ILMergeをVSプロジェクトのセットアップに含める方法を説明する記事もあります here

29
yas4891

参照リソースを埋め込みリソースとして含めるのに最適なツールは、 Costura (a Fody アドイン)です。著者サイモン・クロップは次のように説明しています。

[...] 2つの方法の組み合わせ:

結果は、NuGetから Costura.Fody を取得するだけで済む、非常にシンプルなソリューションです。

特徴:

  • デバッグシンボルを含める
  • 組み込みアセンブリの圧縮
  • 特定のアセンブリを含める/除外する
  • その他( Readme を参照)
22
CodeFox

ILMerge-GUI、.NET合併 を試してください。これはGUIベースのIlmergeであり、すべてのコマンドライン作業を回避します。

7
Pritam

WPF依存関係がある場合、オプションはより制限される可能性があります。...ILMergeはこれらを処理していないようです。しかし、Costura.Fody(上記のCodefoxで述べたように)は完全に機能しており、約5分かかりました...とても良い経験です。

Nugetを使用してインストールします(パッケージマネージャーコンソールで正しいデフォルトプロジェクトを選択します)。

「ローカルコピー」= trueとマークされたすべてのDLLをマージし、マージされた.EXE(標準出力に加えて、現在ほとんど必要ない)を生成します。これも圧縮されます。これはスタンドアロンで使用できます。

ライセンスはMITなので、必要に応じて変更/配布できます。

https://github.com/Fody/Costura/

3
rexall

ServiceStack.Gap プロジェクトをチェックアウトします。このプロジェクトでは、Howto ILMerge ServiceStackのいくつかの例を単一のクロスプラットフォーム。exeに示しています。

ServiceStackには、組み込みアプリの作成に特に適した他の多くの機能も含まれています。

  • .NETのHTTPリスナーを使用して、サービスを自己ホストできます。
  • 事前にコンパイルされたRazorビューをサポート
  • 組み込みリソースをサポート
  • SqliteおよびOrmLiteの組み込みデータベースをサポート
  • 単一の.exeにILMergedできます
2
mythz