137 votes

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

Lorsque je lance msbuild pour construire un projet vc2010, j'obtiens l'erreur suivante :

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é c : \Program Fichier (x86) \MSBuild
  • HKLM \SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolVersions\V4.0 VCTargetsPath défini à $(MSBuildExtensionsPath32) \Microsoft.Cpp\v4.0\
  • En exécutant msbuild /verbosity:diag, le système montre que MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath sont définis comme suit Environnement au début de la construction
  • Le fait de définir MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath en tant que variables d'environnement dans le shell ne les fait pas apparaître en tant que Environnement au début de la construction

Tentative de correction

  • Désinstallation de .net 4.5, réparation de .net 4.0
  • Définir MSBuildExtensionsPath32, MSBuildExtensionsPath64, MSBuildExtensionsPath dans les variables système.

Il semble que MSBuildExtensionsPath32 ne soit pas défini correctement et que la définition de MSBuildExtensionsPath ne soit pas utile.

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

Veuillez me faire savoir si vous avez une idée de ce qui bloque le réglage correct de cette variable.

6voto

KMoraz Points 7804

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 vous avez installé des cibles personnalisées de tiers, ou que votre installation MSBuild est corrompue.

Des choses à essayer :

  • Réparer l'installation de .NET
  • Appliquer le dernier Service Pack de Visual Studio
  • Définir MSBuildExtensionsPath manuellement comme ci-dessus (notez le x86 sur les machines 64 bits)

6voto

mmesser314 Points 331

MSBuild est un outil de construction indépendant qui est souvent associé à d'autres outils. Il peut avoir été installé sur votre ordinateur avec .NET (anciennes versions), Visual Studio (nouvelles versions), ou même Team Foundation Build.

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

Selon la façon dont MSBuild a été installé, les fichiers de configuration peuvent se trouver dans un ou plusieurs de ces chemins.

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

Comme décrit dans d'autres réponses, un élément du registre et/ou une variable environnementale doit pointer vers le chemin du ToolSet.

  • La clé VCTargetsPath sous HKLM \SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • La variable d'environnement VCTargetsPath.

Il arrive parfois qu'une opération comme l'installation d'un outil laisse le registre et/ou la variable environnementale mal définis. Les autres réponses sont toutes des variations pour les corriger.

La seule chose que je dois ajouter, c'est que la variable d'environnement n'a pas fonctionné pour moi lorsque j'ai omis le ``trailing``.

5voto

Sjs Points 195

J'ai eu ce problème sur Visual Studio édition 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'a pas été trouvé

Je l'ai corrigé en ajoutant un String

VCTargetsPath

avec valeur

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

dans le chemin du registre

HKLM \SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0

5voto

Florian Winter Points 61

EDIT : Ceci s'applique aux anciennes versions de Visual Studio / MSBuild (spécifiquement MSVC2015 ?). Avec les versions plus modernes, MSBuild est inclus dans Visual Studio Build Tools 2019, et les compilateurs sont situés à différents endroits et détectés de différentes manières.

Cela est dû à un décalage entre les outils MSBuild installés et les paramètres du registre. Cela peut se produire si vous avez fait une ou plusieurs des choses suivantes :

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

La seule solution sûre et fiable que je connaisse est de réinstaller votre système d'exploitation. Si votre projet a besoin de plusieurs versions de Visual Studio pour être construit, installez le logiciel la version la plus ancienne en premier . Ensuite, corrigez votre code de manière à pouvoir utiliser un seul outil pour le construire, 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, lisez d'abord https://stackoverflow.com/a/41786593/2279059 pour mieux comprendre le problème et ce que font réellement les différentes "solutions". Ensuite, en fonction de votre version et de votre configuration de Visual Studio, l'une des autres réponses ou des variations de celles-ci peuvent éventuellement vous aider.

Quelques indices supplémentaires :

4voto

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

Ce fichier de registre corrige cela pour 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\\'))"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X