Autor Beitrag
doublecross
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 149
Erhaltene Danke: 27

Windows 7
C#; Visual Studio 2015
BeitragVerfasst: Di 10.01.17 12:54 
Hallo,

ich möchte gerne auf einem C# Projekt mehrere Feature Versionen Kompilieren, also z. B. eine Light, eine Standard und eine Profesional Version.

Aus der Erfahrung heraus, das Features über die Jahre hinweg auch gerne in den Versionen wandern (ein ehemaliges Pro Feature wird zum Standard Feature) habe ich das in anderen, nicht .NET Sprachen bisher immer so gelöst, dass ich je Version jeweils eine Präprozessorkonstante definiert habe, also z.B. #define PROFESSIONAL und an einer zentralen Stelle, abhängig von der Vesionsvariable entsprechende Feature Präprozessorkonstante setze:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
#if STANDARD
  #define FEATURE1
  #define FEATURE4
#endif
#if PROFESSIONAL
  #define FEATURE1
  #define FEATURE2
  #define FEATURE3
  #define FEATURE4
  #define FEATURE5
#endif


So kann ich dann jeweils an der Stelle, an welcher das Feature implementiert wird, per bedingter Kompilierung verhindern dass das Feature in Versionen einfließt, und sollte Mal ein Feature aus einer Version in eine andere wandern, so muss ich nur an der entsprechenden Stelle eine passende Definition ergänzen.

Weil das ganze so seit Jahren sehr gut für mich funktioniert, wollte ich das gerne auf ein C# Projekt übertragen, leider musste ich aber feststellen, dass ein #define in C# scheinbar nicht Projektglobal wirkt, es sei den man definiert es in den Projekteinstellungen als "Symbol für Bedingte Kompilierung". Das wäre zwar für meine Übergeordneten Konstanten (#PROFESSIONAL usw., welche ich bei Testen ja auch immer mal wieder ändern muss) noch praktikabel, aber nicht für jede einzelne Feature Konstante.

Daher würde mich interessieren, ob jemanden von euch eine Möglichkeit einfällt, meine Feature Anweisungen doch irgendwie für jede Datei in meinem Projekt zu definieren. Oder ob ihr Ideen für alternative Vorgehensweisen habt.