web-dev-qa-db-ja.com

変更されていないプロジェクトの「ビルド」をVS 2010に強制的にスキップさせる方法は?

当社の製品のソリューションには、100以上のプロジェクト(500以上の量産コード)があります。それらのほとんどはC#プロジェクトですが、ネイティブコードとの通信をブリッジするためにC++/CLIを使用することもほとんどありません。

ソリューション全体の再構築には数分かかります。それはいいです。ソリューションを再構築する場合、本当に時間がかかると思います。うまくいかないのは、完全な再構築後にソリューションを構築するのに必要な時間です。完全な再構築を使用し、ソリューションを変更せずに[構築](F6またはCtrl + Shift + B)を押したとします。変化がない場合、なぜ35秒かかるのですか?出力では、各プロジェクトの「ビルド」を開始したことがわかります。実際のビルドは実行しませんが、かなりの時間を消費する処理を実行します。

35秒の遅れはお尻の痛みです。はい、ビルドソリューションを使用しないでプロジェクトをビルドするだけで時間を改善できます(Shift + F6)。特定のテストプロジェクトでビルドプロジェクトを実行する場合、現在取り組んでいるのは8秒以上かかります。正しいプロジェクトでプロジェクトのビルドを実行する必要があります(依存するテスト済みコードもビルドされることを確認するためのテストプロジェクト)。少なくともReSharperテストランナーは、この単一のプロジェクトのみをビルドする必要があることを正しく認識し、テストを再実行すると、通常は8以上のコンパイルのみが含まれます。私の現在のコーディングカタは次のとおりです。Ctrl+ Shift + Bをタッチしないでください。

変更を加えなくても、テストプロジェクトのビルドには8秒かかります。 8秒かかるのは、依存関係も「ビルド」するためです。私の場合は、20を超えるプロジェクトを「ビルド」しますが、ユニットテストまたは単一の依存関係のみを変更しました。他のプロジェクトに触れたくない。

一部の変更が行われたプロジェクトと変更されたプロジェクトに依存しているプロジェクト(できればこの部分を別のビルドオプションとして)のみをビルドするようにVSに単純に指示する方法はありますか?それはVSが正確に何をしているのかを教えてくれるのではないかと心配していますが、MSの方法で...

TDDエクスペリエンスを改善し、コンパイル時間を短縮したい(TDDでは、コンパイルは1分に2回発生する可能性がある)。

これをさらに苛立たしくするために、私はほとんどの開発者がこのプロジェクトに加わる前にJavaプロジェクトに取り組んでいました。そのため、彼らが必要なときに彼らがどのように怒っているかを想像できます。 Javaでの完全なインクリメンタルコンパイルとは対照的にVSを使用します。 クラスのインクリメンタルコンパイル は必要ありません。ソリューションのインクリメンタルコンパイルが機能することを期待しています。特に、VS 2010 Ultimateのような製品では数千ドルの費用がかかります。

私は本当に次のような答えを得たくありません:

  • 別のソリューションを作る
  • 不要なプロジェクトをアンロード
  • 等.

私はそれらの答えを読むことができます ここ 。それらは許容できる解決策ではありません。 VSがそのような妥協をするために私たちはお金を払っていません。

45
Ladislav Mrnka

デフォルトでは、単一のプロジェクトを実行すると、Visual Studioはソリューション内のすべてのプロジェクトのビルドを常に実行します。そのプロジェクトがソリューション内の他のすべてのプロジェクトに依存していなくても。

Toolsに移動する| オプション| プロジェクトとソリューション| ビルドして実行し、「スタートアッププロジェクトとビルドの依存関係のみを実行」ボックスにチェックを入れます。プロジェクト(F5キー)を実行すると、Visual Studioはスタートアッププロジェクトとそれが依存するソリューション内のプロジェクトのみをビルドします。

13

一部の変更が行われたプロジェクトと変更されたプロジェクトに依存しているプロジェクト(できればこの部分を別のビルドオプションとして)のみをビルドするようにVSに単純に指示する方法はありますか?それはVSが正確に何をしているのかを教えてくれるのではないかと心配していますが、MSの方法で...

本当に(あなたはすでにそれを理解しています)。

あなたは「ビルドシステム」について話している。 MSVSはそうではありません。これはIDEであり、プロジェクトとソリューションに資産を整理し、「ビルド」することができます。ただし、ビルドシステムではありません。ビルドシステムになることは決してありません(長い話ですが、非常に異なるテクノロジが必要です)。

対照的に、MSVSはIDEで、「デバッグ」サイクル(例:システム実行中のデバッガの「ステップイン」および「ステップオーバー」)を含む、加速された反復開発用です。 MSVSが「輝く」場所。

ビルドシステムとして「輝き」ません。それはそうするために作られたものではありません。そして、これはおそらく変更されないでしょう(長い話、Microsoftでさえ同意するでしょう)。

私はかわいくなろうとしているわけではなく、このニュースをお届けしたことを心からお詫び申し上げます。この答えも私を傷つけます。

ソリューションのインクリメンタルコンパイルが機能することを期待しています。特に数千ドルの費用がかかるVS 2010 Ultimateのような製品では。

MSVSはIDEインタラクティブデバッグ/開発用であり、ビルドシステムではありません(上記を参照)。したがって、MSVSは設計されていない製品シナリオで測定し、 決してあなたが望むように機能しないでしょう。

私は本当に次のような答えを得たくありません:

  • 別のソリューションを作る
  • 不要なプロジェクトをアンロード
  • 等.

私はそれらの答えを読むことができます。それらは許容できる解決策ではありません。 VSがそのような妥協をするために私たちはお金を払っていません。

あなたの期待は妥当です。私も欲しいです。ただし、MSVSはこれを提供する製品ではありません。

繰り返しますが、私は「キュート」になることを試みていません。 「ビルドシステム」に投資するつもりであれば、 CMake のようなものを使用して構成を管理し、Makefiles(または何か)をエクスポートして「実際のシステム」を実行することに価値があるかもしれません。 "ビルドしますが、"エクスポート "*.vcprojおよび*.slnファイルは、MSVS IDE内で反復的かつインタラクティブに作業を行う場合に使用します。

EDIT:むしろ、ビルドワークスペースが10倍の速度向上を実現するためのSSD(ソリッドステートディスク)が必要です。 a RAMビルドの速度が100倍向上するディスク(冗談ではなく、64MB RAMは32MBを提供しますRAMディスク、これは私たちが使用しているものです。)

8
charley

できることの1つは、アプリを小さなソリューションに分割することです。それぞれがまとまりのある部分です。各ソリューションを個別にビルドします。各ソリューションに、ソースコードを使用するのではなく、依存するソリューションの出力を使用させる。

これにより、各コンポーネントのフィードバックサイクルを短縮できます。

編集:修正されたソリューション

さらに、すべてのソースを取得してコンパイルおよびテストするのではなく、バイナリビルド製品コンポーネント CIビルドを取得する統合ビルドを作成します。この統合ビルドは、コンポーネントのビルドが成功するたびに実行されるようにトリガーする必要があります。

このビルドは、完全なビルド(これはstillは毎晩ビルドする必要があります)と同等のバイナリである必要がありますが、コンポーネントの増分後にトリガーされ、実行する必要がないため、実行時間が大幅に短縮されます。ソースをコンパイルまたは取得します。

さらに、ビルドを複数のエージェントに分散するという概念をサポートするエンタープライズグレードのビルドシステムを使用している場合は、作業を拡張し、CIサイクル全体を最長のコンポーネントのビルドにかかる時間に短縮できます。統合スイートをテストします(最大で)。

お役に立てれば。

4
Assaf Stone

これについては少し遅れていますが、異なるビルド構成を検討しましたか?

ビルド構成に応じて、特定のプロジェクトをビルドしないようにVisual Studioに指示できます。

開発者は、作業中のプロジェクトに関連する構成を選択するだけで済みます。

2
Chris Haines

かなり古いスレッドですが、同じものの小さいバージョンに悩まされていたと言えるので、Visual Studio 2012にアップグレードし、問題はようやく修正されたようです。上記のRedGate .NET Demonソリューションも、今のところかなりうまく機能しているようです。

1
Wade Hatler

これは古い問題です。

並列ビルドとSSDを使用します。ここを参照してください(私は-クイックグーグル): http://www.hanselman.com/blog/HackParallelMSBuildsFromWithinTheVisualStudioIDE.aspx

0
Sentinel

私は主に私が望む(そしてそれ以上の)ことを行うツールを見つけました: RedGate .NET Demon 。私の大きなソリューションでいくつかの問題(C++プロジェクトの問題、ビルドターゲットの切り替えの問題など)に遭遇したため、それはおそらくまだ最初のバージョンですが、私は今のところ本当に気に入っています。 VS IDEで変更されたファイルを追跡し、影響を受けるプロジェクトのみを再構築する方法が特に気に入っています。

編集:.NET Demonは、VS 2015では必要ないため廃止されました。以前のバージョンでも動作します。

0
Ladislav Mrnka