2011-02-19 7 views
16

Actuellement, dans ma construction automatique, j'utiliser le devenv.exe pour construire mes fichiers de solution:MsBuild avec la solution Fichiers avec DefineConstants

devenv /build myproject1.sln 

Maintenant, je veux créer deux versions de mon application, la version normale , et la version légère. Le code source pour ces deux versions est le même, c'est juste que dans la version légère certaines fonctionnalités sont désactivées, et pour cela j'utilise #define lite les directives du préprocesseur (Dans le fichier csproject, ces constantes sont définies sous DefineConstants Property Group).

Dans MsBuild - ou tout simplement redev build - est-il possible de spécifier si le symbole que je veux doit être présent dans la construction? La raison pour laquelle je pose cette question est parce que je veux construire mon premier fichier sln avec les directives du préprocesseur lite (pour la version allégée), et la deuxième fois, sans les directives du préprocesseur lite (pour la version complète).

Répondre

29

Dans votre fichier de projet ajouter une nouvelle section PropertyGroup pour la version Lite

<PropertyGroup Condition="'$(LiteVersion)'=='true'"> 
    <DefineConstants>$(DefineConstants);lite</DefineConstants> 
</PropertyGroup> 

Retirer Lite de toutes les définitions de DefineConstants.

MSBuild.exe myprojeect1.sln 
MSBuild.exe myprojeect1.sln /p:LiteVersion=true 

Vous pouvez créer une configuration supplémentaire dans VS pour basculer entre les versions. Mais cela peut conduire à des erreurs de configuration lorsque vous avez oublié d'ajouter un drapeau à lite config. Je peux suggérer une solution plus élégante. Créez le fichier .bat ou modifiez le lien pour exécuter myproject1.sln:

set LiteVersion=true 
devenv.exe myproject1.sln 
+0

Probablement préférable de placer le groupe personnalisé ci-dessus en dessous de ceux normaux qui définissent le débogage, la libération, etc. – paulecoyote

2

Créez deux configurations dans votre fichier sln - une pour le Lite et une pour le Normal. Dans la configuration Lite, définissez la directive du préprocesseur via la boîte de dialogue Propriétés du projet. Ensuite, lors de la construction à l'aide de devenv.com, spécifiez la configuration correcte dans laquelle construire.

+0

Voulez-vous présenter un exemple sur cette procédure? – Graviton

+0

Pourquoi cette réponse a-t-elle été dépréciée? – Anttu

+0

C'est très bien pour 1 propriété qui change de configuration, mais qui ne s'évalue pas bien .. Et si vous avez 2+ configurations? Peut-être une construction de journalisation spéciale. Vous auriez alors besoin de configs 2 * 2 * 2 par exemple. Debug_Lite_Logging - tout devient très salissant ... Je préfère la réponse de sergio. –

Questions connexes