2009-05-21 23 views
5

1つのソリューションで複数のプロジェクトを含む.netアプリケーションでは、名前空間がCompany.Product.UIに設定され、もう1つがCompany.Product.UI.WebPagesでプロジェクトが作成されています。私の問題は、2つのdllは2つのプロジェクトを構築した結果です。どのように私は単一のdllを持つことができ、現在のソリューション構造を保持します。私はVisual Studio 2008とC#を使用します。複数のプロジェクトからの単一アセンブリ

+1

http://stackoverflow.com/questions/1878807/visual-studio-2008-creating-single-dll-from-solution-with-many-projects –

答えて

11

2つのプロジェクトを1つのプロジェクトにマージするか、ILMergeのようなツールを使用して、結果のアセンブリを1つのアセンブリにマージする必要があります。

ILMergeは 単一のアセンブリに複数の.NETアセンブリをマージする を使用することができるユーティリティです。 Microsoft Framework Developer Centerのツール& ユーティリティページから自由に使用できる です。

あなたはMSBuildのタスクとしてILMergeを自動化したいなら、私はあなたがilmerge-tasksを見てみることをお勧め:

自動ビルド時にILMergeを使用してに興味が

? ILMergeのタスク には、 という2つのビルド可能プロジェクトが含まれており、MSBuildとNAntの両方からILMergeに というタスクとしてアクセスできます。 には、 がILMergeとタスクdllをマージするポストビルドイベントが含まれているので、 の場合は、 ILMerge.exeが存在しない状態でタスクを使用できます。

+1

Visual StudioのビルドプロセスでILMergeを統合することはできますか私はその作業を自動化するように? – kjv

+0

@kjvこれは、ilmerge-taksビットについてです –

1

2つのプロジェクトのすべてのファイルを含む新しいプロジェクトファイルを作成できたと思います。これにより、現在の構造を開発用に保持し、マージされたプロジェクトファイルを使用してプロジェクトからリリースされる出力を構築することができます。プロジェクトファイルはかなり簡単なxmlファイルなので、テキストエディタでそのファイルを開くと、どのように素早く動作するのかが分かります。

もちろん、このアプローチの明らかな欠点は、プロジェクトの1つでファイルを追加または削除するときに、この3番目のプロジェクトファイルを維持する必要があることですが、それが頻繁に起こらないものであれば、まあ、私は思う。

0

これを行う簡単な方法がありますが、これは最善の方法ではありません。必要なdllの名前を持つ新しいソリューションを作成します。このプロジェクトでは、2つのプロジェクトの名前と同じフォルダ構造を作成します。その後、特定のフォルダで、[既存のアイテムを追加]を実行します。その名前のプロジェクトにcsファイルを追加します。ファイルを追加するときは、[追加]ボタンの[リンクとして追加]を選択します(追加ボタンの横にあるドロップダウンがあります)。それを続けてビルドしてください。あなたはdllを持っています。

例えば、 Aという名前のプロジェクトとBという名前のプロジェクトがあり、Cと呼ばれるdllにそれらをマージしたい場合Cと呼ばれる新しいプロジェクトを作成します。このプロジェクトの中にAという名前のフォルダとBという別のフォルダを追加します。 csファイルX.csとBにはY.cs.xというファイルがあります。 Aというフォルダで、右クリックして既存のアイテムを追加します。プロジェクトAに行き、X.cs.を選択します。 [追加]ボタンの横に、下向き矢印が表示されます。それをクリックし、[リンクとして追加]を選択します。このプロジェクトをビルドすれば、binフォルダにdllが置かれます。

関連する問題