web-dev-qa-db-fra.com

Comment spécifier la plate-forme pour MSBuild?

J'essaie d'utiliser MSBuild pour créer une solution avec une plate-forme cible spécifiée (j'ai besoin des deux fichiers binaires, x86 et x64). Voici comment je l'ai essayé:

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"

Cependant, la construction échoue toujours si la plate-forme est différente de "Tout processeur". Qu'est-ce que je fais mal?

Voici la sortie de tout ce que MSBuild imprime:

C:\WINDOWS\Microsoft.NET\Framework\v3.5> MsBuild SolutionPath\Solution.sln/t: Reconstruction/p: Configuration = Version/p: Platform = "x86" Version du moteur de compilation Microsoft (R) 3.5.30729.1 [ Microsoft .NET Framework, version 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. Tous droits réservés.

La construction a commencé le 1.7.2010 8:28:10. Projet "SolutionPath\Solution.sln" sur le noeud 0 (Rebuild targe t (s)). SolutionPath\Solution.sln: erreur MSB4126: la configuration de la solution spécifiée "Version | x86" n'est pas valide. Veuillez spécifier une configuration de solution valide à l'aide des propriétés de configuration et de plate-forme (par exemple, MSBuild.exe Solution.sln/p: Configuration = Debug/p: Platform = "Tout processeur") ou laissez ces propriétés vierges pour utiliser la configuration de solution par défaut. Projet de construction terminé "SolutionPath\Solution.sln" (Rebuild t arget (s)) - FAILED.

Échec de construction.

"SolutionPath\Solution.sln" (cible de reconstruction) (1) -> (cible ValidateSolutionConfiguration) -> SolutionPath\Solution.sln: erreur MSB4126: la configuration de solution spécifiée "Version | x86" n'est pas valide. Spécifiez une configuration de solution valide à l'aide des propriétés Configuration et Platform (par exemple, MSBuild.ex e Solution.sln/p: Configuration = Debug/p: Platform = "Tout processeur") ou laissez ces propriétés vierges pour utiliser la configuration de solution par défaut.

0 Warning(s)
1 Error(s)

Temps écoulé 00: 00: 00.03

Si j'essaie de le construire pour x86/x64 avec devenv, cela fonctionne parfaitement, mais j'essaie de configurer un serveur de construction sans installer toutes les versions nécessaires de Visual Studio. En passant, s’il existe un meilleur outil gratuit (qui prend en charge .NET Framework 4), j’aimerais en entendre parler.

132
David Božjak

Si vous souhaitez générer votre solution pour x86 et x64 , votre solution doit être configuré pour les deux plates-formes. En fait, vous avez juste une configuration Any CPU .

Comment vérifier la configuration disponible pour un projet

Pour vérifier la configuration disponible pour un projet donné, ouvrez le fichier de projet (*.csproj par exemple) et recherchez un PropertyGroup avec le droit Condition.

Si vous voulez créer en mode Release pour x86, vous devez avoir quelque chose comme ceci dans votre fichier de projet:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

Comment créer et éditer la configuration dans Visual Studio

Configuration Manager panel
(source: Microsoft.com )

New solution platform button
(source: msdn.com )

New solution platform panel
(source: msdn.com )

Comment créer et éditer la configuration (sur MSDN)

99
Julien Hoarau

Dans MSBuild ou Teamcity, utilisez la ligne de commande

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64

ou utilisez une forme plus courte:

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

Cependant, vous devez quand même configurer la plate-forme dans votre projet, voir la réponse de Julien Hoarau.

167
Tomas Kubes

Si vous essayez de le faire à partir de la ligne de commande, vous rencontrez peut-être un problème où une variable d'environnement 'Plate-forme' à l'échelle de la machine est définie pour vous et fonctionne contre vous. Je peux reproduire cette information si j'utilise la fenêtre de commande VS2012 au lieu d'une fenêtre de commande Windows classique.

A l'invite de commande, tapez:

définir la plate-forme

Dans une fenêtre de commande VS2012, la valeur prédéfinie est "X64". Cela semble interférer avec tout ce qui se trouve dans mon fichier de solution.

Dans une fenêtre de commande normale, la commande "set" génère un message "variable non définie" ... ce qui est correct.

Si le résultat de votre commande 'set' ci-dessus ne renvoie aucune valeur de variable d'environnement, vous devriez pouvoir continuer.

13
JJMpls