47

3 つのソリューションがあり、ソリューション A をコンパイルするには、ソリューション B および C からビルドされたバージョンの DLL が必要です。1つのソリューションにマージすることはできません...

これまでのところ、Visual Studio はソリューション参照をサポートしていないようです。また、msbuild は、あるソリューションを別のソリューションから構築していることを知るのに十分賢いようです。全体的な目標は、複数のソリューションを、ソリューション A だけが 1 つしかないように見えるようにすることです。

これはよくある問題だと思いますが、どうすればうまくリンクできますか?

4

9 に答える 9

31

この質問は、異なる関連するフォームでポップアップしています。これをカバーする MSDN ページが実際にあります。

あなたが探しているのは、大規模システムのパーティション化された単一ソリューション モデルに似たマルチソリューション アプローチです。すべてを構築し、コンポーネント間の依存関係を維持する 1 つの「すべて」のソリューションを用意します。これは、ソリューション A をビルドする必要がある場合にビルドするものです。その後、コンポーネント B または C のみを含む個別のソリューションができます。基本的には、まだ 3 つのソリューションがありますが、ソリューション B および C からのプロジェクトをソリューションに追加します。 A.

于 2009-05-05T17:23:16.920 に答える
4

私は最近、Visual Studio 2008 で既存のプロジェクトを複数のソリューションに含めることができることを発見しました。これまでの唯一の欠点は、共有プロジェクトに変更を加え、その共有プロジェクトを使用する複数のソリューションを開いている場合、他のソリューションを「リロード」するよう求められることです。

したがって、プロジェクトを必要とするすべてのソリューションに「既存のプロジェクトを追加」するだけです。現在のサイトで TFS を使用していますが、ソース管理のイーサに問題はないようです。

于 2009-05-05T17:18:04.840 に答える
3

あなたが見ているのはプロジェクトレベルであるはずです。ソリューション B と C に含まれるプロジェクトをビルドし、ソリューション A の関連プロジェクトに DLL への参照を追加します。

プロパティ グループがある場合は Msbuild で

<PropertyGroup>

<SolutionsToBuild>SolutionB</SolutionsToBuild>
<SolutionsToBuild>SolutionC</SolutionsToBuild>
<SolutionsToBuild>SolutionA</SolutionsToBuild>
</PropertyGroup>

次に、MSBuild タスクを実行します

<MSBuild Projects="@(SolutionsToBuild)"/>

お役に立てれば

于 2009-03-25T15:03:26.333 に答える
1

マージ プロセスを自動化して時間を節約できます: http://code.google.com/p/merge-solutions/

わずかに異なる問題がありましたが、1 つの共通ライブラリを使用していた約 15 のソリューション (合計で ~150 プロジェクト) でした。問題は、共通ライブラリから冗長コードをリファクタリング/削除するために、それらすべてを 1 つにマージしようとした場合です。1. 15 のソリューションをマージするには、VS で何度もクリックして待機する必要があります。 2. 結果のソリューションは最新のものではありませんでした。

于 2011-02-23T17:38:38.963 に答える
0

MakefileプロジェクトをソリューションAに追加して、ソリューションBとCをビルドし(たとえば、msbuildを使用)、AのすべてのプロジェクトをそのMakefileプロジェクトに依存させることができます。この方法では、BおよびCのプロジェクトにプロジェクト参照を追加することはできませんが、dll参照を使用することができ、それらは常に最新のソースから構築されます。

于 2009-03-25T16:02:15.800 に答える
0

この回答によると、関連するソリューションを構築する独自のバッチ ファイルを作成することをお勧めします。

これは、ビルド プロセスがビルドの進行状況 (Visual Studio の [出力] ウィンドウに似ています) を、ビルドが実行されるたびにコマンド Promote に出力するため、非常に便利です。

さらに、あるソリューションを他のソリューションの前にビルドする必要がある場合は、独自のビルド順序を作成できます。たとえば、次のようになります。

  1. ビルド ソリューション B
  2. ビルド ソリューション C
  3. ビルド ソリューション A (「ソリューション B」と「ソリューション C」ビルド ファイルを内部的に使用)

上記のビルド順序を明確にし、最新の Visual Studio バージョンのほとんどをサポートするスクリプトをすばやく作成しました。

よろしく。

于 2016-08-01T11:27:53.313 に答える
0

プロジェクトのビルド前イベント (ソリューション A) に依存する dll (ソリューション B および C) のコマンド ライン ビルド コマンドを追加することができます。

于 2009-03-25T15:15:40.077 に答える
0

プロジェクト B と C をプロジェクト A と同じソリューションに入れることができない場合、プロジェクト A をビルドするときに最新のソース コードを含む B と C のバイナリがあることを確認する方法はありません。

私が見た中で最も簡単な解決策は、ソース コード リポジトリに共通のフォルダーを作成し、共有する必要がある場合にすべてのプロジェクトがバイナリをコピーすることです。その後、ローカル フォルダーがリポジトリと同じに見える限り、他のすべてのプロジェクトはそのフォルダー内のバイナリを参照できます。

完全な解決策ではありませんが、操作は非常に簡単です。

于 2009-03-25T15:17:32.257 に答える