2016-09-27 5 views
0

Soit je n'ai pas compris les directives du préprocesseur, soit elles ne fonctionnent pas. J'essaie d'écrire une application pour plusieurs frameworks. (DNX451, DNX46, NETSTANDARD1_5, ...)affecter une valeur à la directive du préprocesseur

Je dois toujours écrire quelque chose comme (par exemple très simple, je sais que je ne besoin ici)

public class Test 
{ 
#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0) 
    public int? testVar; 
#else 
    public int testVar; 
#endif 

    public string Method() 
    { 
#if !(NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0) 
     return (testVar ?? 0).ToString(); 
#else 
     return testVar.ToString(); 
#endif 
    } 
} 

donc est-il une possibilité de définir une variable? Au moins par fichier, pour que je puisse dire .: par exemple

#define NetCore (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0) 

donc je ne dispose que d'écrire

public class Test 
{ 
#if !NetCore 
    public int? testVar; 
#else 
    public int testVar; 
#endif 
.... 

aurait beaucoup moins de code et je pourrais le définir au-dessus de mon dossier.

Ou est-ce simplement impossible avec les produits dérivés du préprocesseur?

+0

Est-ce que l'ajout d'un conditionnel à la '.csproj' être une option pour vous? – Caramiriel

+0

@Caramiriel hmm, serait une option s'il n'y a vraiment aucune possibilité de le définir dans le code. –

Répondre

1

Cela semble fonctionner pour moi (doit être en haut du fichier):

#if (NETSTANDARD1_5 || NETSTANDARD1_6 || NETCOREAPP1_0) 
#define NetCore 
#endif 
+1

Oh, ouais, maintenant ... cette solution facile et logique. Il est parfois temps de dormir avant de coder: D merci! C'est complètement ce que j'ai cherché. –