2012-09-28 3 views
2

Donc j'essaye de construire un projet C# en mono. Je souhaite inclure une référence à System.Deployment conditionnellement à la présence ou à l'absence de la constante __MonoCS__ définie par le compilateur Mono. Je ne suis pas sûr si ces constantes sont encore définies quand MSBuild obtient une prise de mon .csproj cependant.MSBuild Conditionnel basé sur des constantes

Je pense que je pourrais avoir à ajouter une configuration Mono qui définirait une constante MONO et je peux supprimer la référence à System.Deployment et compiler conditionnellement les lignes i besoin d'une commande #if MONO ... mais ce serait tellement plus facile si je pouvais simplement ajouter Condition="Defined(__MonoCS__)" à la ligne en question et l'appeler bon ...

+0

Même pour ajouter un "Defined (__ MonoCS__)", vous devez indiquer à xbuild que __MonoCS__ est réellement défini, probablement via la propriété DefineConstants. Mais vous définiriez cela uniquement pour une configuration mono, alors vous pourriez aussi ajouter cette configuration mono et conditionnellement référencer System.Deployment – radical

Répondre

2

Je pense que vous faites malheureusement des choses en arrière. Les constantes du compilateur ne sont jamais retransmises à MSBuild, la chaîne d'invocation est MSBuild -> Compiler -> Preprocessor.

+0

Merci, c'est ce que je me demandais ... Donc la manière typique de faire ceci est de créer un Mono. construire la configuration et supprimer les références pour cette config? – Crisfole

+0

Oui, ce serait la façon la plus courante de le faire. – skolima

0

Malheureusement Mono a this bug en xbuild (MSBuild équivalent) ce qui rend très difficile de définir des conditions comme celle-ci.

Vous voulez essayer de corriger le bug? Ça devrait être facile, mais je n'ai pas encore eu le temps d'essayer.

Questions connexes