2

MSBuildを使用してビルドしようとすると、私は奇妙な問題に直面しています。MSBuild - プロジェクト参照の作成中に競合状態が発生する

私はMSBuildを使用して、/ m(並列ビルド)とBuildProjectReferencesをtrueに設定したソリューションファイルをビルドしています。 slnファイルにA.vcxprojとB.vcxprojがあるとします.BにAへのプロジェクト参照があります。 プロジェクトが最初にビルドを開始し、コンパイル中にBプロジェクトがビルドを開始しますプロセスは(並列ビルド以降)ビルドAを呼び出すでしょう。 同じプロジェクトAをビルドしようとするプロセスが2つあり、アクセスの問題が発生するため、競合状態が発生します。

MSBuildは、Aがビルディングを終了していない場合、またはBを呼び出してもAがビルド中であり、ビルドが完了するのを検出した場合、理想的にはビルドBを呼び出すべきではありません。 これは発生しません。また、これはMSBuildでのみ発生します - 私はVS2015 IDEからソリューションファイルをビルドしようとしません。

MSBuildがこのように動作する理由は何ですか?

+0

どのMsBuildのバージョン、どのVisual C++のバージョンですか?それは影響を与えるかもしれない。 – jessehouwing

+0

VS 2015およびMSBuild 14.0 – comingbacktolife

答えて

1

は最後に、あまりにもSLNファイルでは、すべての依存projectreference
2を追加し、

のMSBuildプロジェクトの依存関係は、次の2つの方法vcxproj自体で
1で追加されることを期待し、私の問題への解決策を見つけましたプロジェクトの依存関係を定義します。

次のVSブログは、実際には反対を示しています。たとえば、https://blogs.msdn.microsoft.com/vcblog/2010/02/16/project-settings-changes-with-vs2010/は、プロジェクト依存関係とprojectreferenceは類似しており、特にprojectreferencesを1つだけ使用しています。

これはVS IDEを使用してビルドする場合に当てはまりますが、MSBuildではビルドしない場合に当てはまります。プロジェクト依存関係は、ProjectReferenceProjectDependenciesの両方に定義する必要があります。

これは、私と同じ問題にヒットした人に役立ちます。

関連する問題