1

Stack Overflow でこの質問をしたのは私が初めてではないことはわかっていますし、最後になることもないと確信しています。しかし、これを行う方法を研究するのに何時間も費やし、物理的にそれを試みた後、私はほとんどあきらめる準備ができています.

実行可能ファイルにビルドする .NET Framework 4、C#、WinForms アプリケーションがあります。私は多くの多くのdllに依存しています。dll は複数のカテゴリに分類されます。

  • 独自の依存関係なしで作成したライブラリ
  • 私が書いたライブラリは、私が書いた他のライブラリに依存しています
  • サードパーティの dll に依存して作成したライブラリ
  • サードパーティのスタンドアロン DLL
  • 他の dll に独自の依存関係を持つサード パーティの dll

したがって、アプリケーションをコンパイルすると、実行可能ファイルと約 15 個の dll を含むディレクトリが作成されます。

単一の実行可能ファイルを簡単に配布できるように、すべての dll を単一の実行可能ファイルにパックしたいと考えています。

IlMerge がこれに使用するために一般的に推奨されるアプリケーションであることは知っていますが、より直感的で、WinForms と WPF の両方で動作する、より使いやすいものがあるかどうか知りたいです。

4

4 に答える 4

3

ここでの問題は、ILMerge が .Net アセンブリしかマージできないことです。ファイル lame_enc.dll は .Net アセンブリではなく、標準の Windows dll であるため、ILMerge で読み込むことができません。

これを回避するには、lame_enc.dll をアセンブリに埋め込み、アプリケーションで必要なときにそれを抽出します。詳細については、この記事をご覧ください。

http://weblogs.asp.net/ralfw/archive/2007/02/04/single-assembly-deployment-of-managed-and-unmanaged-code.aspx

于 2012-09-06T20:29:38.600 に答える
1

結局、私はまったく別の方向に進みました。

ここにあるCosturaVisualStudioExtensionsを使用することにしました。

これらの拡張機能は、2つの方法を組み合わせて使用​​します

ここで優れているのは、拡張機能をVisualStudioにインストールするだけでよいことです。その後、DLLを単一の実行可能ファイルにパックするプロジェクトの場合は、プロジェクトを選択し、メニューバーの[プロジェクト]、[Costura]、[構成]、[OK]の順にクリックします。プロジェクトをリロードするように求められます-[はい]をクリックします。これで、プロジェクトをビルドするたびに、単一の実行可能ファイル(または、ライブラリで実行している場合はDLL)が作成されます。これ以上簡単なことはありません。

于 2012-09-10T17:41:19.567 に答える
0

正確な問題に対処するには、ファイルC:\Release\lame_enc.dllが存在し、実際に .NET ファイルであることを確認してください。ILMerge は .NET アセンブリのみをマージできます。

アプリケーションの配布だけが心配な場合は、ILMerge を使用してそれらをマージすることを心配せずに、すべてのバイナリをインストールするインストーラーを作成することを検討してください。

ILMerge を使用する別の方法は、ここで説明されているようにバイナリをアセンブリに埋め込むことです

于 2012-09-06T20:27:40.760 に答える
0

ILMerge は、純粋な (混合モードではない) CLR アセンブリのみを結合します。これは、すべての CIL モジュールを抽出し、それらを 1 つの新しいアセンブリに再リンクすることによって機能します。アセンブリ リソースも再結合されます。

ILMerge は、ネイティブの実行可能コードをマージできません。lame_enc.dll はネイティブ DLL ファイルであり、CIL モジュールが含まれていないため、結合できません。

アプリケーションを単一の実行可能ファイルにパックする場合の回避策は、lame_enc.dll をアセンブリ リソースとして含め、lame_enc.dll をディスクの一時フォルダーに保存し、それが保存されたフォルダーをアプリケーションの PATH に追加することです。 [DllImport] ランタイム リンカーがアクセスできるようになります。

于 2012-09-06T20:25:14.380 に答える