2011-11-10 31 views
70

私は、サービススタック(DLL)をEXEプロジェクト(Azureアプリケーションの起動タスク)を使用して消費しています。これは、次のサービススタックのDLL &いくつかのAzureのDLLをEXEプロジェクトにコピーしました。複数のアセンブリを1つにマージする方法は?

dlls

私はこのEXEプロジェクトをビルドするとき、私は、すべてのサービス・スタックのをコピーする必要がある任意のマシン上で私のEXEを実行するので、その後、アズールのDLLは私のEXEに同梱されますが、サービス・スタックのDLLをEXEにバンドルされることはありませんDLLを手動で作成します。

は、私は私が私のEXEへのすべてのこれらのDLLをバンドルするためにしなければならないはずです

JsonServiceClient client = new JsonServiceClient(servicepath); 

を使用するには、このサービス・スタックのDLLを使用していますか?

答えて

95

あなたのVSのプロジェクトの設定にILMergeを含める方法について説明記事もあります:

は、 0123を参照してください

OR

  • SmartAssembly(商用)のようないくつかのツールを使用
    それは他のものの間

OR

  • を(あなたのソースコードを変更する必要)を埋め込んでいないとマージすることができますcode that yourself in less than 10 lines(無料ですが最小限のソースコード変更)
    すべての必要な依存関係を「組み込みリソースE」 - 彼らはEXEファイルに含まれているこの方法...あなたはセットアップに、実行時にリソースから読み込み、.NETランタイムに必要なDLLを返すAssemblyResolveハンドラを必要とする...
+3

組み込みアセンブリのJeffrey Richterのソリューションを思い出させてくれてありがとう!必要なコードを注入するツールと組み合わせるツールについては、[Costura](https://github.com/Fody/Costura/)に言及した私の答えを参照してください。 – CodeFox

26

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

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

あなたは、いくつかのオプションがありhere

+0

こんにちは、私は実行可能ファイルに外部リソース(ファイル/画像)を追加することができますか? –

6

ILMerge-GUI, the .NET mergerを試してみてください。 GUIベースのIlmergeで、すべてのコマンドライン作業が不要です。

+2

素晴らしい!私のためにうまくいった! –

+1

Codeplexがシャットダウンしているので、移動したプロジェクトリンクは次のとおりです。 https://bitbucket.org/wvd-vegt/ilmergegui – Hegi

2

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

  • あなたのサービスは自己ホスト使用することができます:

    ServiceStackも特によく、それはこれらの組み込み作成するアプリケーションに適しています他の機能の数が含まれています。NETのHTTPリスナー

  • は、プリコンパイルレイザーは
  • をビューサポート埋め込みリソースをサポート
  • Sqliteを中に埋め込まれたデータベースをサポートし、OrmLite
  • は、単一の.exe
19

にする素晴らしいツールをILMergedすることができます組み込みリソースとして参照されるアセンブリはCosturaFodyアドイン)です。次のように著者のサイモンKroppはそれを説明します

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

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

特長:

  • デバッグシンボル組み込みアセンブリの
  • 圧縮
  • 含む/除く特定のアセンブリを含む
  • その他(Readmeを参照)をお持ちの場合は
+7

OMG Costura.Fodyが正しい答えです。ナゲットからパッケージをインストールし、プロジェクトを再構築しました。今はスタンドアロンのEXE AWESOME !! –

+3

私はそれがどれほど簡単か信じられません。ナゲットからパッケージをインストールすれば、あなたは完了です。 – iraSenthil

+1

私はCostura.Fodyも使用しています。セットアップが簡単で、NuGetパッケージをリソースとして組み込むのは簡単です。プロジェクトを手に入れる。 –

2

は、WPFは、あなたの依存関係オプションはもっと限られているかもしれません..... ILMergeはこれに対処するようには見えません。 Costura.Fody(上記のCodefoxで言及されているように)は私たちのために完璧に働いていましたが、行くには約5分かかりました。とても良い経験です。

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

"Copy Local" = trueとマークされたすべてのDLLをマージし、圧縮されたマージされた.EXE(標準出力と並んで、ほとんどは現在必要ではありません)を生成します。これはスタンドアロンで使用できます。

ライセンスはMITであるため、必要に応じて変更/配布することができます。

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

関連する問題