web-dev-qa-db-fra.com

avertissement MSB8012: assurez-vous que les valeurs des propriétés $ (OutDir), $ (TargetName) et $ (TargetExt) correspondent à la valeur spécifiée dans% (Link.OutputFile)

J'obtiens l'erreur suivante lors de la construction de mon code.

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets (990,5): avertissement MSB8012: TargetPath (E:\Study\FWIF\demola\ext-libs\libcommoncpp2- 1.6.0\w32\Debug\ccgnu2.dll) ne correspond pas à la valeur de la propriété OutputFile de l'éditeur de liens g\CapeCommon14.dll). Cela peut entraîner une construction incorrecte de votre projet. Pour corriger cela, assurez-vous que les valeurs des propriétés $ (OutDir), $ (TargetName) et $ (TargetExt) correspondent à la valeur spécifiée dans% (Link.OutputFile).

J'espère que quelqu'un saura quoi faire.

30
Abdul Samad

Avez-vous mis à niveau un projet vers Visual Studio 2010 à partir d'une version précédente? Si c'est le cas, il s'agit d'un problème bien connu.

Guide de mise à niveau du projet Visual Studio 2010 C++ http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx =

Avertissements lors de la mise à niveau

Voici certains des avertissements courants que vous pouvez rencontrer lors de la conversion:

1) Répertoire de sortie de l'éditeur de liens

L'un des avertissements que vous pouvez voir lors de la mise à niveau de vos applications est MSB8012: $ (TargetPath) et la valeur de la propriété OutputFile de l'éditeur de liens ne correspond pas:

  • MSB8012: $ (TargetExt) ('.dll') ne correspond pas à la valeur de la propriété OutputFile de l'éditeur de liens 'C:\foo\Debug\MFCActiveX.ocx' ('.ocx') dans la configuration de projet 'Debug | Win32'. Cela peut entraîner une construction incorrecte de votre projet. Pour corriger cela, assurez-vous que la valeur de la propriété $ (TargetExt) correspond à la valeur spécifiée dans% (Link.OutputFile).

  • MSB8012: $ (TargetPath) ('C:\foo\Debug\MFCActiveX.dll') ne correspond pas à la valeur de la propriété OutputFile du lieur 'C:\foo\Debug\MFCActiveX.ocx' ('C:\foo\Debug\MFCActiveX .ocx ') dans la configuration du projet' Debug | Win32 '. Cela peut entraîner une construction incorrecte de votre projet. Pour corriger cela, assurez-vous que la valeur de la propriété $ (TargetPath) correspond à la valeur spécifiée dans% (Link.OutputFile).

    Link.OutputFile est la valeur définie dans l'éditeur de liens -> Général -> Fichier de sortie sur la page de propriétés. Par défaut, sa valeur est $ (OutDir) $ (TargetName) $ (TargetExt), qui est identique à la valeur de $ (TargetPath). Cependant, lorsque nous convertissons une application à partir d'une version précédente, il n'y a pas de moyen facile de conversion pour analyser Link.OutputFile pour déterminer quelles sont exactement les valeurs pour $ (TargetName) et $ (TargetExt), car différents clients peuvent avoir formaté les de différentes manières. Pour contourner ce problème, nous avons décidé de conserver la valeur de Linker.OutputFile lors de la conversion. Après la conversion, $ (TargetName) sera par défaut $ (ProjectName). $ (TargetExt) prendra par défaut l'extension par défaut pour le type d'application: .dll pour Dynamic Library, .lib pour Static Library et .exe pour Application. La valeur Link.OutputFile sera préservée. Avertissement MSB8012 sera émis dans le journal de conversion si Link.OutputFile et $ (TargetPath) ne sont pas identiques. Vous obtiendrez les mêmes avertissements lors de la création de l'application.

    $ (OutDir), $ (TargetName) et $ (TargetExt) sont exposés sur la page de propriétés "Général", respectivement sous "Répertoire de sortie", "Nom cible", "Extension cible". Vous pouvez modifier manuellement les valeurs de ces propriétés afin de ne plus recevoir l'avertissement.

  • Si votre projet produit une bibliothèque d'importation (Éditeur de liens -> Avancé -> Bibliothèque d'importation), vous devrez peut-être également modifier le dossier de sortie de la bibliothèque d'importation si la conversion du répertoire de sortie de l'éditeur de liens n'est pas le répertoire de sortie par défaut. Sinon, la bibliothèque d'importation générée peut se trouver dans un répertoire différent de la sortie de l'éditeur de liens.

  • Debugging.Command a la valeur par défaut $ (TargetPath) après la conversion. Vous devrez peut-être apporter des modifications pour que le bon exécutable soit lancé lors de F5 (débogage) ou Ctrl + F5 (démarrage sans débogage).

27
Brown

Voir aussi ici Stackoverflow MSB8012 . Ce qui a fonctionné pour moi lors de la conversion d'un projet VS2008 C++ en VS2012: cliquez avec le bouton droit sur le projet dans l'Explorateur de solutions, sélectionnez les propriétés, dans la fenêtre contextuelle: propriétés de configuration, éditeur de liens, général. Sélectionnez le fichier de sortie sur la droite, cela donne une liste déroulante, sélectionnez inhérent aux valeurs par défaut du parent ou du projet. Cliquez sur appliquer. Cela donne le paramètre de l'éditeur de liens par défaut: $ (OutDir) $ (TargetName) $ (TargetExt). Reconstruisez le projet et l'avertissement ne devrait plus apparaître.

6
jdelange

Le même problème m'est apparu pour les DLL de débogage, que je voulais avoir un "D" de fin dans le nom de base. Par exemple, foo.dll (Release) mais fooD.dll (Debug). Lorsque vous affinez le nom de sortie dans les paramètres de l'éditeur de liens de la configuration de débogage - l'avertissement laid MSB8012 se produit.

La seule solution qui fonctionne avec Visual-Studio 2010 semble être un post-événement pour la configuration de débogage:

@echo off
echo Copying $(OutDir)$(TargetName)$(TargetExt) as $(TargetName)D$(TargetExt)
copy /Y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)$(TargetName)D$(TargetExt)
4
Andreas Spindler

J'ai eu le scénario où mon nom d'exécutable était différent du nom du projet ET je voulais qu'il construise l'exécutable/dll à un emplacement différent de celui où le projet était situé.

1) Modifiez le nom du projet par défaut pour qu'il soit différent. Général-> TargetName
<mon nom d'exécutable>

2) Sortie vers un emplacement différent où je veux que l'exécutable se construise. Général-> OutputDirectory <mon nouvel emplacement va ici>

3) Mettez à jour les paramètres de l'éditeur de liens. Éditeur de liens -> Nouvelle valeur générale: $ (OutDir) $ (TargetName) $ (TargetExt)
Cela prend les nouveaux paramètres de 1 et 2.

3
VickyDaus

J'ai obtenu la même erreur après la conversion de l'ancien projet en VS 2010.

Pour résoudre ce problème, j'ai créé un projet vide du même type (par exemple .dll, .lib, .exe).
J'ai ensuite copié ses valeurs par défaut dans les propriétés du projet dans mon projet pour le répertoire de sortie, le répertoire intermédiaire et le fichier de sortie

1
sergtk

J'ai réussi à résoudre un problème similaire en modifiant manuellement le fichier vcxproj.

Les paramètres OutDir et TargetName étaient au bas du fichier de projet.

   ...
      <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
        <OutDir>$(OUTPUT_DIRECTORY)\</OutDir>
        <IntDir>$(ProjectDir)\$(Configuration)\$(ProjectName)\</IntDir>
        <TargetName>$(ProjectName)</TargetName>
      </PropertyGroup>
   </Project>

Déplacer le bloc au-dessus du bloc ClCompile a résolu le problème.

0
Synck