私は100を超えるプロジェクト(C ++、マネージC ++、C#)を含む大規模なソリューションを持っており、それらの多くは相互に依存しています。
TeamCityサーバーがあり、そこでこのソリューションを構築したいと思います。
VisualStudioでソリューションを構築すると、すべてうまくいきますが、TeamCityではCS0006エラーが発生します。その理由はわかっています-TeamCityはMSBuild4を使用してソリューションをビルドしますが、MSBuild 4には既知のバグがあります-ビルドの順序を無視し、必要に応じてソリューションからプロジェクトをビルドします。あなたが持っている場合、この振る舞いのために:
Project A
Project B which has reference to A
MSBuildは、次の順序でこれらのプロジェクトをビルドできます。
1. B
2. A
最も簡単な解決策は、BuildProjectReferences = true(デフォルト)を設定することです。これにより、参照されるすべてのプロジェクトが自動的にビルドされます。ただし、このソリューションで参照されているプロジェクトがすべてではなく、別のソリューションからプロジェクトをビルドできないため、このアプローチを使用することはできません。
この問題の別の修正方法は次のとおりです。ConfigurationManagerを使用して、ビルドすべきではないすべてのプロジェクトを無効にしますが、VisualStudioでのみ機能します。MSBuildはそれを無視し、参照されているすべてのプロジェクトをビルドします。
問題は、VisualStudioのウィンドウProjectBuildOrderに表示されるビルド順序を復元することです。これは、コンソールから直接MSBuildを使用する場合には当てはまりません。