web-dev-qa-db-fra.com

Pourquoi MSBuild recherche-t-il dans C:\Microsoft.Cpp.Default.props au lieu de c:\Program Files (x86)\MSBuild? (erreur MSB4019)

Lorsque j'exécute msbuild pour construire un projet vc2010, l'erreur suivante apparaît:

error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists 
on disk.
  • msbuild situé dans c:\Program File (x86)\MSBuild 
  • HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolVersions\V4.0 VCTargetsPath défini sur $ (MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0 \
  • lors de l'exécution de msbuild/verbosity: diag, le bon système indique que MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath sont définis comme Environnement au début de la construction
  • la définition de MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath définie en tant que variables d’environnement dans Shell ne provoque pas leur affichage en tant que Environnement au début de la construction

Corrections tentées

  • Désinstallez .net 4.5, réparé .net 4.0
  • Définissez MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath dans les variables système.

Il semble que MSBuildExtensionsPath32 ne soit pas défini correctement et que définir MSBuildExtensionsPath n’aide en rien.

SET MSBuildExtensionsPath="C:\Program Files\MSBuild"

S'il vous plaît laissez-moi savoir si vous avez des idées ce qui bloque le réglage correct de cette variable.

108
Peter Kahn

Pour ceux qui n'ont pas suivi l'ordre interdit MS (voir Réponse de Xv ), vous pouvez toujours résoudre le problème.

MSBuild utilise la variable VCTargetsPath pour localiser les propriétés cpp par défaut, mais ne le peut pas car le registre ne dispose pas de cette valeur chaîne. 

Vérifier la valeur de chaîne

  • Lancer regedit
  • Navigateur à HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • Inspectez la clé VCTargetsPath. La valeur devrait = "$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

Pour réparer

  • Lancer regedit Navigator sur HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 
  • Ajouter une valeur de chaîne VCTargetsPath 
  • Définir la valeur sur "$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

Remarque: HKLM signifie HKEY_LOCAL_MACHINE.

47
Peter Kahn

J'ai eu ce problème lors de la publication d'une application cocos2d-x à l'aide de leur outil de ligne de commande, appelé MSBuild. J'utilise Win 7 64 bits, VS2013 Express, cocos2d-x version 3.3, .NET Framework 4.5 installé.

J'ai résolu le problème en définissant les éléments suivants avant d'exécuter la commande de publication cocos.py:

SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120
67
Jeff

J'ai eu le même problème récemment et après avoir installé différents paquets dans un ordre différent, tout devenait très sale. Ensuite, j'ai trouvé ce dépôt - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

Il installe les outils de compilation Python & VS nécessaires à la compilation de la plupart des modules de nœud. Cela a fonctionné un régal!

24
Luke

Installation La mise à jour du compilateur Microsoft Visual C++ 2010 Service Pack 1 pour le SDK Windows 7.1 a corrigé les erreurs MSB4019 que je compilais sur Windows 7 x64.

Le fichier Lisez-moi de cette mise à jour indique que l'ordre recommandé est

  1. Visual Studio 2010
  2. Kit de développement logiciel Windows 7.1
  3. Visual Studio 2010 SP1
  4. Mise à jour du compilateur Visual C++ 2010 SP1 pour le SDK Windows 7.1
12
xverges

Sur les systèmes 64 bits, MSBuild utilise par défaut les propriétés suivantes (où C: est SystemDrive):

MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath64 = C:\Program Files\MSBuild

Si ce n'est pas le cas, cela signifie que des cibles de substitution tierces personnalisées sont installées ou que votre installation de MSBuild est corrompue.

Choses à essayer:

  • Réparer l'installation .NET
  • Appliquer le dernier Service Pack Visual Studio
  • Définissez MSBuildExtensionsPath manuellement comme ci-dessus (notez la partie x86 sur les ordinateurs 64 bits)
6
KMoraz

J'ai eu ce problème sur l'édition Visual Studio 2015. Lorsque j'ai utilisé cmake pour générer un projet, cette erreur est apparue. 

erreur MSB4019: le projet importé "D:\Microsoft.Cpp.Default.props" n'était pas trouvé

Je l'ai corrigé en ajoutant une chaîne 

VCTargetsPath

avec valeur 

$ (MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140

dans le chemin du registre 

HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0

4
Sjs

MSBuild dans un outil de construction indépendant qui est souvent associé à d'autres outils. Il a peut-être été installé sur votre ordinateur avec .NET (versions antérieures), Visual Studio (versions plus récentes) ou même Team Foundation Build. 

MSBuild a besoin de fichiers de configuration, de compilateurs, etc. (un ToolSet) qui correspond à la version de Visual Studio ou de TFS qui l'utilisera, ainsi qu'à la version de .NET avec laquelle le code source sera compilé. 

Selon la manière dont MSBuild a été installé, les fichiers de configuration peuvent se trouver dans un ou plusieurs de ces chemins. 

  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0 \
  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120 \
  • C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140 \ 

Comme décrit dans d'autres réponses, un élément de registre et/ou une variable d'environnement doivent être dirigés vers le chemin ToolSet. 

  • La clé VCTargetsPath sous HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • La variable environnementale VCTargetsPath.

Parfois, une opération telle que l’installation d’un outil laisse le jeu de variables de registre et/ou d’environnement incorrect. Les autres réponses sont toutes des variantes pour les corriger. 

La seule chose que je dois ajouter, c’est que la variable environnementale ne m’a pas fonctionné lorsque j’ai quitté la fin du fichier \

3
mmesser314

L'installation La mise à jour du compilateur Microsoft Visual C++ 2010 Service Pack 1 pour le SDK Windows 7.1 a fonctionné pour moi. Cependant, j'ai rencontré des problèmes avec la mise à jour car j'avais déjà VS 2010 et VS 2010 SP1 installé. Comme mentionné par Xv ci-dessus, le fichier readme.htm contient des solutions aux problèmes d’installation les plus courants dans la section "Problèmes connus". Je voudrais suivre les instructions du fichier readme.htm et redémarrer votre ordinateur après chaque tentative de dépannage, car certaines installations écrivent dans votre base de registre.

2
heatfan

Rien d’autre n’a fonctionné pour moi, si ce n’est en définissant le chemin:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0
2
sowmiya lakshmi

Les entrées de registre pour la clé MSBuild ont bien fonctionné pour moi. Il est important de se rappeler que cela doit être fait pour les branches 64 bits ou 32 bits selon la version de MSBuild que vous exécutez. Je ne recommanderais pas d'utiliser des variables d'environnement car cela pourrait causer des problèmes dans différentes versions de MSBuild.

Ce fichier de registre corrige cela dans les deux cas:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\10.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\12.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
"VCTargetsPath10"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath10)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V110\\'))"
"VCTargetsPath12"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath12)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V120\\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\\Microsoft.Cpp\\v4.0\\V140\\'))"
2
Konstantin Ineshin

Pour Visual Studio 2017 sur Windows 10

La plupart des réponses proposées ici s'appliquent aux anciennes versions de Visual Studio. Ce qui a fonctionné pour moi a été de définir une variable d’environnement appelée VCTargetsPath et de lui donner une valeur de

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets

D'autres réponses ici définissent cette variable sur c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140 mais j'ai remarqué que dans mon installation de Visual Studio, il n'y avait pas de dossier appelé Microsoft.Cpp dans mon dossier MSBuild. Gardez donc cela à l'esprit, ainsi que le fait que le chemin ci-dessus concerne la version communautaire de Visual Studio 2017. Dommage, cette réponse sera également bientôt obsolète avec la sortie de Visual Studio 2019 dans les prochains mois.

2
Chris Gong

Je viens d'ajouter VCTargetsPath={c:\...} comme variable d'environnement à mon travail Hudson.

0
user2818782

J'étais confronté au même problème avec MSBuild pour VS 17

J'ai résolu ce problème en appliquant les étapes suivantes:

  • Dans mon cas, le fichier Microsoft.Cpp.Default.props était situé à C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets et j'ai donc créé la chaîne VCTragetsPath dans le registre sous HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 avec la valeur C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets.

  • J'ai aussi fait fonctionner mon Jenkins en tant qu'utilisateur administrateur

Cela a résolu mon problème.

0
Hemant

Je vois cela dans un environnement VS2017. Mon script de génération appelle d'abord VsDevCmd.bat, et pour résoudre ce problème, je définis la variable d'environnement VCTargetsPath après VsDevCmd et avant d'appeler MSBuild:

set VCTargetsPath=%VCIDEInstallDir%VCTargets
0
Hugh

Ajout à la réponse de Chris Gong à propos de VS2017/2019 ci-dessus (je n'ai pas encore de permission pour les commentaires).

Si les outils de génération VS 2019 sont installés plutôt que Visual Studio complet, les chemins de fichiers sont légèrement différents. VCTargetsPath devrait alors être

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\

Notez également la barre oblique inverse de fin - obligatoire au moins dans mon cas (outils de compilation TFS2017, VS2019). Modification correspondante de l'entrée PATH également.

0
Lars V

Cela est dû à une incompatibilité des jeux d'outils MSBuild et des paramètres de registre installés. Cela peut arriver si vous avez effectué l'une ou plusieurs des actions suivantes:

  • Installer plusieurs versions de Visual Studio dans le mauvais ordre
  • Désinstallez une ou plusieurs versions de Visual Studio.
  • Apportez manuellement des modifications de registre ou des modifications à l'installation de Visual Studio.

La seule solution sûre et fiable consiste à réinstaller votre système d'exploitation. Si votre projet nécessite plusieurs versions de Visual Studio pour être généré, installez la version la plus ancienne en premier Corrigez ensuite votre code afin que vous puissiez le créer à l'aide d'un seul outil. Sinon, vous ou vos collègues vous retrouverez bientôt dans le même pétrin.

Si ce n’est pas une option pour vous, commencez par lire https://stackoverflow.com/a/41786593/2279059 pour une meilleure compréhension du problème et de ce que les différentes "solutions" font réellement. Ensuite, en fonction de votre version et de votre configuration de Visual Studio, l’une des autres réponses ou variantes de celles-ci peut éventuellement vous aider.

Quelques astuces supplémentaires:

0
Florian Winter

Je suis tombé sur cette erreur en écrivant un script de construction qui placerait MSBuild sur le% PATH% après avoir fouillé récursivement dans le dossier C:\Windows\Microsoft.NET pour tous les fichiers MSBuild.exe trouvés. Le dernier accès trouvé était le répertoire mis sur le chemin. Étant donné que la commande dir allait frapper le dossier Framework64 après Framework, un des fichiers MSBuild 64 bits était placé sur mon chemin. J'essayais de créer une solution Visual Studio 2010 et je me suis retrouvé à modifier ma chaîne de recherche de C:\Windows\Microsoft.NET à C:\Windows\Microsoft.NET\Framework afin de me retrouver avec un fichier MSBuild.exe 32 bits. Maintenant, mon fichier de solution est construit.

0
jxramos

Pour l'enregistrement, le fichier Microsoft.Cpp.Default.props peut modifier l'env var VCTargetsPath et rendre les utilisations ultérieures de cette var incorrect . J'ai eu ce problème et je l'ai résolu en définissant VCTargetsPath10 et VCTargetsPath11 avec la même valeur que VCTargetsPath.

Cela devrait être adapté en fonction de la version du VS que vous utilisez.

0
STM