組み込みの方法はありません(どのバージョンのVSでもインストールされているMSBuildファイルはプロジェクトのビルドを実行せず、機能リクエストはlike this oneです)。かなり簡単な解決策は、参照されたプロジェクトをビルド前のイベントとして構築し、別のプロジェクトを参照する各プロジェクトにそのファイルを含めるmsbuildファイルを作成することです。例えば、一般的なビルドツールまたはそうでディレクトリ内buildprojectreferenecs.targetsという名前のファイルを作成し、コンテンツ
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="BuildProjectReferences" BeforeTargets="BuildGenerateSources">
<MsBuild Projects="@(ProjectReference)"
Properties="Configuration=$(Configuration);Platform=$(Platform)"/>
</Target>
</Project>
でこれは、単にそれを含むプロジェクトと同じ構成とプラットフォームと各ProjectReferenceを構築します。 projectreferencesを使用する各プロジェクトでこれをインポートします。インポートは、ProjectReference項目が定義された後に行われる必要があります。一番下のすべての方法:あなたがビルドを実行する場合、実際のコンパイルが参照されたプロジェクトのビルドを開始する前に、彼らがしている場合
...
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <!-- this is near the bottom already -->
<Import Project="..\BuildProjectReferences.targets" /> !<-- add this -->
...
</Project>
今、(ひいてはその参照先のプロジェクトなどの)に関係なく発生します解決策かどうかいくつかの欠点:
- プロジェクトのrefernceを追加しますが、このファイルは何もインポートしないことを忘れた場合は、ビルドが無条件に発生するので、参照プロジェクトがすでに構築されている場合は、ビルドが再び開始され
- 起こります。ビルドシステムはすべての出力が最新であるとみなしてすぐに終了します。
- VSのビルドシステムは、ソリューション外の参照プロジェクトの変更を検出しないため、ソリューション内のすべてのプロジェクトが、最新のものであり、ソリューションの外にある参照プロジェクトのソースファイルを変更すると、ビルドされません。しかし、コマンドラインビルドの場合はそうではありません。そこにはプロジェクトのビルドが開始されるため、参照プロジェクトもビルドされます。
すべての点で、価値があるかどうかはわかりません。間違いなく、このソリューションはプロジェクトのための単一のソリューションでなければならず、ソースから構築されたすべての依存関係を含む必要があります。それが起こることを確認するのは開発者の仕事です。コードを素早く行うための失敗をキャッチするには、コードベースへの各コミットを構築するビルドサーバがあり、エラーを速やかに発見することが最善のソリューションです。開発者は、間違いの通知を受け取り、すぐに修正を適用します(特にそれは些細なものです)。
どのような言語ですか? C++?プロジェクト参照は、ソリューションファイルではなくプロジェクトファイルの一部ですので、それを使用する各ソリューションは自動的に参照を取得します。 – stijn
はい、C++。参照を使用していますが、参照されたプロジェクトが解決策に含まれていない場合、Visual Studioにビルドを指示する方法はありますか? – traal
私はかなり組み込みの方法がないと確信しています。 msbuildターゲットを使用してファイルを作成するだけで、すべてのプロジェクト参照をビルドしてから、そのファイルをすべてのプロジェクトに含めることができます。ほぼ完璧なのは、たとえそれがまだ成立していないということではない。ソリューションAには変更はありませんが、ソリューションAの外にあるプロジェクトからソースファイルに変更があります.Aはそれ自身のプロジェクトの変更を検出しないためです。これはおそらく修正される可能性もありますが、それはすでに難しいことです。とにかく:私が選ぶソリューションは、CIセットアップがあるので、ビルドの破損は早期に発見されます。] – stijn