J'essaie d'utiliser MSBuild pour créer une solution avec une plate-forme cible spécifiée (j'ai besoin des deux 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 "Any CPU". Qu'est-ce que je fais mal?
Voici la sortie en temps que MSBuild imprime:
C: \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t: Rebuild / p: Configuration = Release / p: Platform = "x86" Microsoft (R) Build Engine Version 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 nœud 0 (Reconstruire la cible (s)). SolutionPath \ Solution.sln: erreur MSB4126: la configuration de solution spécifiée "Release | x86" n'est pas valide. Veuillez spécifier une configuration de solution valide à l'aide des propriétés Configuration et Platform (par exemple MSBuild.exe Solution.sln / p: Configuration = Debug / p: Platform = "Any CPU") ou laissez ces propriétés vides pour utiliser la configuration de solution par défaut. Projet de construction terminé "SolutionPath \ Solution.sln" (Reconstruire le (s) objectif (s)) - ÉCHEC.
Échec de construction.
"SolutionPath \ Solution.sln" (Reconstruire la cible) (1) -> (ValidateSolutionConfiguration target) -> SolutionPath \ Solution.sln: erreur MSB4126: La configuration de solution spécifiée "Release | x86" n'est pas valide. Veuillez spécifier 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 = "Any CPU") ou laissez ces propriétés vides 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 build sans installer toutes les versions nécessaires de Visual Studio. À propos, s'il existe un meilleur outil gratuit (qui prend en charge .NET Framework 4), j'aimerais en entendre parler.
Win32
tandis que moden .NET utilisex86
Réponses:
Si vous souhaitez créer votre solution pour x86 et x64 , votre solution doit être configurée 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 unPropertyGroup
avec la droiteCondition
.Si vous voulez construire en
Release
mode pourx86
, vous devez avoir quelque chose comme ça dans votre fichier projet:Comment créer et modifier la configuration dans Visual Studio
(source: microsoft.com )
(source: msdn.com )
(source: msdn.com )
Comment créer et modifier la configuration (sur MSDN)
la source
Win32
au lieu de,x86
par exemple,CMake
ceux générés font (libssh2
utiliseCMake
).Dans MSBuild ou Teamcity, utilisez la ligne de commande
ou utilisez une forme plus courte:
Cependant, vous devez quand même mettre en place une plateforme dans votre projet, voir la réponse de Julien Hoarau.
la source
Platform="Any CPU"
ouPlatform="Mixed Platforms"
pour ceux qui en ont besoin.Si vous essayez de le faire à partir de la ligne de commande, vous rencontrez peut-être un problème où une variable d'environnement à l'échelle de la machine 'Platform' est définie pour vous et travaille contre vous. Je peux reproduire cela si j'utilise la fenêtre de commande VS2012 au lieu d'une fenêtre de commande Windows standard.
À l'invite de commande, tapez:
Dans une fenêtre de commande VS2012, j'ai une valeur prédéfinie «X64». Cela semble interférer avec tout ce qui se trouve dans mon fichier de solution.
Dans une fenêtre de commande standard, la commande 'set' entraîne un message "variable non définie" ... ce qui est bien.
Si le résultat de votre commande 'set' ci-dessus ne renvoie aucune valeur de variable d'environnement, vous devriez être prêt à partir.
la source
Pour VS2017 et 2019 ... avec les fichiers de projet SDK de la bibliothèque principale moderne , la plate-forme peut être modifiée pendant le processus de construction. Voici un exemple pour passer à la
anycpu
plate - forme, juste avant l'CoreCompile
exécution de la tâche intégrée :Dans mon cas, je construis un FPGA avec
BeforeTargets
et desAfterTargets
tâches, mais je compile une application C # dans l'ensembleCoreCompile
. (en partie parce que je peux vouloir une sorte d'application de ligne de commande, et en partie parce que je ne pouvais pas comprendre comment omettre ou remplacerCoreCompile
)Pour construire pour plusieurs binaires simultanés tels que x86 et x64: soit une tâche de construction manuelle distincte serait nécessaire, soit deux fichiers de projet distincts avec les paramètres
<PlatformTarget>x86</PlatformTarget>
et respectifs<PlatformTarget>x64</PlatformTarget>
dans l'exemple ci-dessus.la source