2016-09-27 6 views
0

Entweder habe ich die Präprozessordirektiven nicht verstanden oder sie funktionieren nicht.Wert der Präprozessordirektive zuweisen

Ich versuche, eine Anwendung für mehrere Frameworks zu schreiben. (DNX451, DNX46, NETSTANDARD1_5, ...)

Also ich muss immer etwas schreiben wie (wirklich einfaches Beispiel, ich weiß, ich würde es nicht brauchen hier)

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 
    } 
} 

so gibt es eine Möglichkeit, eine Variable definieren? Mindestens pro Datei, so könnte ich sagen z.B .:

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

So nur

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

wäre viel weniger Code zu schreiben, ich habe, und ich konnte es auf meine Datei definieren.

Oder ist dies nicht möglich mit Präprozessordeektiven?

+0

Würde eines bedingten auf das Hinzufügen von '.csproj' eine Option für Sie sein? – Caramiriel

+0

@Caramiriel hmm, wäre eine Option, wenn es wirklich keine Möglichkeit gibt, es im Code zu definieren. –

Antwort

1

Dies scheint für mich zu arbeiten (an der Spitze der Datei sein):

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

Oh, ja, jetzt ... diese einfache und logische Lösung. Manchmal ist es Zeit, vor dem Programmieren zu schlafen: D danke! Genau das habe ich gesucht. –