2015-10-15 20 views
7

Ich versuche, eine reine x64-Build für einen komplexen Build mit vielen Lösungen (einige für CI, einige für Entwickler) und Hunderte von Projekt und haben den Weg laufen „Fehler MSB8013: Dieses Projekt nicht die Konfiguration und Plattform Kombination von Debug enthält | Win32“x64 build: error MSB8013: Dieses Projekt enthält nicht die Konfiguration und Plattform-Kombination von Debug | Win32

ich reduziert habe es auf eine einfache Konfiguration:

  • Lösung A enthält Projekt X & Projekt Y. Projekt X hat ein Projekt Referenz Y. Projekt
  • Lösung B enthält auch enthält Projekt X.

Keines der Projekte oder Lösungen enthalten eine Win32-Plattform - es gelöscht worden ist.

Wenn ich bauen Lösung B (als x64), erhalte ich

Fehler MSB8013: Dieses Projekt die Konfiguration nicht enthalten und Platform Kombination von Debug | Win32

Die Fehlermeldung enthält manchmal zusätzliche Informationen:

Dieser Fehler kann auch auftreten, wenn ein anderes Projekt versucht, einerzu folgen 210 Projekt-zu-Projekt Verweis auf dieses Projekt wurde dieses Projekt entladen oder ist nicht in der Lösung enthalten, und das Referenzieren Projekt erstellt nicht mit der gleichen oder einer gleichwertigen Konfiguration oder Platform.

Das Problem ist die Referenzierung Projekt bedeutet „bauen die gleiche oder eine äquivalente Konfiguration oder Plattform.“

Mit Blick auf die Msbuild-Diagnose wird Projekt Y erstellt, da Projekt X einen Projektverweis darauf enthält. Aber die Konfiguration und Plattformeigenschaften werden kurz vor dem Projekt Y gelöscht wird gebaut:

1>Task "MSBuild" (TaskId:28) 
1> Removing Properties: (TaskId:28) 
1> Configuration (TaskId:28) 
1> Platform (TaskId:28) 

Als Ergebnis Microsoft.Cpp.Default.props Tritte in und setzt diese Debug | Win32:

1>Task "Message" (TaskId:11) 
1> Configuration=Debug (TaskId:11) 
1>Done executing task "Message". (TaskId:11) 
1>Task "Message" (TaskId:12) 
1> Platform=Win32 (TaskId:12) 
1>Done executing task "Message". (TaskId:12) 

Wie kann ich dies verhindern und msbuild die gewählte Konfiguration & Plattform übergeben?

(Ich verstehe die ultimative Lösung NuGet verwenden Paket-Abhängigkeiten zu verwalten, aber das ist in der kurzen Frist nicht möglich)

Antwort

0

Eine Fix ist die zur Hand bearbeiten.vcxproj Dateien die Standard-Plattform definieren:

  1. Öffnen Sie die vcxproj Datei in einem Texteditor
  2. Fügen Sie diese Zeile in der "Globals" Property:

    < Plattform Zustand = " '$ (Platform) '== ''“> x64 </Plattform >

3

ich könnte ein ähnliches i lösen ssue durch Einbeziehung aller referenzierten Projekte in die Lösung - in diesem Fall einschließlich Projekt Y in Lösung B.

0

Es scheint, es ist ein Fehler in Microsoft.CppBuild.targets Datei. Auf einigen Maschinen sehe ich zwei solche Dateien: eine in C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.CppBuild.targets mit ~ 120KB Größe und C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets mit 77KB Größe. Der zweite ist fehlerhaft und bekommt $ (Configuration) | $ (Platform) Wert, was den erwähnten Fehler ergibt. Dieses Problem ist wahrscheinlich direkt mit this topic verbunden, da VCTargetsPath in meinen Projekten in falsche (77KB) Microsoft.CppBuild.targets-Verzeichnis (ich verwende VS2015, so dass es das eine aus V140-Verzeichnis verwenden sollte) zeigte. Ich habe zwei Problemumgehungen gefunden: 1) ersetzen Sie fehlerhafte Datei oder 2) ändern Sie HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0\VCTargetsPath10 Registrierung, um richtige Datei zu zeigen.

0

Ich finde es schwierig zu sehen, was Sie damit erreichen wollen. Willst du immer X und Y bauen? Auch in der Lösung, die keinen Bezug zu Y hat? Wäre für mich ziemlich unlogisch. Ich kann Ihnen jedoch einige Lösungen anbieten, um dieses Problem zu beheben/zu beheben, je nachdem, was Sie wollen.

Wenn Sie X & Y mit A und X mit B

in Lösung A aufbauen wollen, setzen Sie das andere Projekt als Build Abhängigkeit anstelle Projekt Y in Projekt X der Referenzierung Sie können es nicht festlegen, solange es sich auf das andere Projekt bezieht (ich entferne immer die Referenz in der .vcxproj, es befindet sich irgendwo am Ende des Projekts), aber sobald Sie die innere Projektreferenz entfernt haben, können Sie die Lösung haben Hinweis darauf und dann sollte es gut funktionieren.

Wenn Sie die Lösung A mit MSBuild bauen, wird es bauen X und Y, während mit MSBuild Aufbau Lösung B

Else

Wenn Sie mit X & Y aufbauen wollen entweder Lösung

Sorry, aber das ist in MSBuild momentan nicht wirklich möglich. Ich würde empfehlen, Projekt Y der Lösung hinzuzufügen und darauf Bezug zu nehmen, aber warum sollten Sie das tun? Sie haben bereits ein Projekt, in dem beide enthalten sind. Wenn Sie unterschiedliche Ausgaben wünschen, können Sie leicht verschiedene Konfigurationen vornehmen.

Verwandte Themen