Laden...

Debug und Release: Verschiedene Codes

Erstellt von pidi vor 15 Jahren Letzter Beitrag vor 15 Jahren 9.109 Views
P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren
Debug und Release: Verschiedene Codes

Hi,

ich hätte gerne beim start meines Programmes eine Abfrage ob es sich um die Debug, Release oer eine selbst erstelle Konfiguration handelt.
Habe mir eine extra Admin Konfiguration erstellt. Und je nach Konfig.einstellung soll er bestimmten Code ausführen oder eben nicht.

Was ich bisher gelesen habe braucht man einen #define und dann wird mit #if abgefragt.

Hier mal was ich bisher so zusammengebastelt habe:


#define DEBUG
#define RELEASE
#define ADMIN

using System;
.
.
.
private void Form1_Load(object sender, EventArgs e)
        {
            #if DEBUG
            {
                label1.text = "Debug";
            }
            #endif

            #if RELEASE
            {
                label1.Text = "Release";
            }
            #endif

            #if ADMIN
            {
                label1.Text = "Admin";
            }
            #endif
            .
            .
            .

Leider führt mir der Code jede #if Bedinung aus egal welche Konfiguration eingestellt ist. Weiß jemand was ich da falsch mache oder vergessen habe?

Danke.

L
770 Beiträge seit 2006
vor 15 Jahren

Versuch es mal ohne #define, dann klappt es auch 🙂

lg Lion

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Danke für die Antwort Lion1984,

aber es geht leider nicht so ganz. Wenn ich Konfig Debug habe funktioniert es.
Wenn ich eine andere Konfig benutzte wird kein Code ausgeführt.

Kann vieleicht damit zusammenhängen:


private void Form1_Load(object sender, EventArgs e)
        {
            #if DEBUG
            {
                label1.text = "Debug";
            }
            #endif

            #if RELEASE
            {
                label1.Text = "Release";
            }
            #endif

            #if ADMIN
            {
                label1.Text = "Admin";
            }
            #endif

Der Code in den #if RELEASE und #if ADMIN Klammern wird gar nicht compiliert. Auch wenn Konfiguration Admin oder Release eingestellt ist.

Ich kann da z.B.


#if RELEASE
{
    Wurstbrot!!!!
}
#endif

#if ADMIN
{
    Butterbrot!!
}
#endif

reinschreiben. Das wird beim starten mit Konfig Admin oder Release vollkommen ignoriert.

Verstehe ich nicht.

3.971 Beiträge seit 2006
vor 15 Jahren

Wie Lion1984 schreibt, gehören die Defines in deinem Beispiel nicht in den Quellcode, sondern werden beim Kompilieren übergeben. In Visual Studio geht das über die Projekteigenschaften->Erstellen->Symbole für bedingte Kompilierung.

Für Release gibt es keine Standard-Define

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

L
770 Beiträge seit 2006
vor 15 Jahren

Hallo,

gibt es für Release ein Standard?

Denn wenn ich oben die _Config switche, ändert der Code für Debug die Farbe von Grau in Bunt, jedoch bei Relase nicht..

Weiters... wenn du #Define setzt.. siehst du das die CodeTeile in Farbe geschrieben werden und somit "aktiviert".

Danke kleines_eichhoernchen,
jetzt weiß ich auch, wo man dies einstellen kann 🙂 thx

lg Lion

lg Lion

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Ja Danke nochmals.

Jetzt hab ich es hingefummelt bekommen.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Jetzt muss ich nochmal was Fragen.

Es funktioniert zwar jetzt wunderbar mit den verschiedenen Konfigurationen wenn ich die Software aus VS starte und debugge.

Wenn ich allerdings ein Setup-Projekt einfüge wird beim installieren (egal ob ich direkt aus VS installiere oder die setup Files aus den Ordnern (Debug, Release, Admin...) nehme) die eingestellte Konfiguration nicht beachtet. Es wird immer die Debug Konfig installiert.

Bei den Setup-Projekt Eigenschaften gibt es ja nicht wirklich viel Auswahl, und was ich da so probiert habe ging nicht.

Wäre nett wenn jemand ein Tipp hätte

Danke.

U
1.688 Beiträge seit 2007
vor 15 Jahren

Hallo,

es wird natürlich die Konfiguration installiert, mit der Du das Setup erzeugt hast.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Ja, so wäre es ja auch logisch.
So ist es aber nicht bei mir.

Wie gesagt ich kann nach dem erstellen aller Konfigurationen die setup.exe aus dem Ordner Debug, Release oder Admin installieren. Es wird aber bei allen 3 immer die Debug Konfiguration installiert. Das gleiche wenn ich es im VS über rechtsklick auf das Setup-Projekt installieren will. Egal mit welcher Konfig das Setup erstellt wurde es kommt immer die gleiche.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Oder meinst du dass ich für jede Konfiguration ein extra Setup Projekt erstellen muss? Das nicht ein Setup-Projekt für meine 3 Konfigurationen geht?

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo pidi,

die Kompiler-Prädirektiven (so heißen die Variablen, die man mit "#if" abfragen kann) sind überhaupt nicht dafür geeignet zur Laufzeit eine Entscheidung zu treffen.

Das ist immer nur für die Entwicklungszeit gedacht, so dass man anständig etwas testen kann. Auch ein "Ich mach Module mit Präkompilerdirektiven" ist überhaupt nicht tragbar. Für das Aktivieren der Module oder entsprechendem Programmcode muss immer neu kompiliert werden, das ist nicht tragbar.

Also wenn es darum geht, "Schalter" einzubauen, und das Programm von "außen" zu steuern, dann würde ich entweder die Kommandozeilenparameter verwenden oder eine Konfigurationsdatei erzeugen und dort die Einstellungen definieren. Falls der Benutzer das nicht manipulieren können darf, dann hilft eine Verschlüsselung dieser Daten.

Und um eine Rollen- / Benutzerverwaltung zu realisieren sind die Kompilerdirektiven auch nix, entwerfe lieber ein Log-In.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Aha OK! Jetzt kommen wir der Sache schon näher.

Danke norman_timo, ich werd mich mal mit der Kommandozeilenparameter und Konfigurationsdatei Geschichte beschäftigen.

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

Ok Ok.

Aber warum geht es denn nicht mit den Konfig.Einstellungen? Wäre meiner Meinung nach viel geschickter und vor allem auch logischer.

Warum erstellt mir VS denn 3 verschiedene Ordner (\Debug, \Release, \Admin) mit setup.exe files wenn hinterher immer der gleiche Code rauskommt?

4.506 Beiträge seit 2004
vor 15 Jahren

Hallo pidi,

das kann ich Dir nun nicht sagen, da ich keine VS-Setup Projekte erstelle, ich mache das mit InnoSetup, und dort kann man explizit bestimmen, welche Version er verwenden soll.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

3.971 Beiträge seit 2006
vor 15 Jahren

In VS kannst du das auch machen, siehe Bild. Bei dem Setupprojekt ist es wichtig, dass du die Projektausgabe (-ngruppe) deines Projektes hinzufügst. Hast du bei Konfiguration Aktiv ausgewählt, kannst du oben in VS zwischen Debug und Release hin und herwechseln und dein Setupprojekt nimmt sich dann die entsprechende Projektausgabe

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

P
pidi Themenstarter:in
58 Beiträge seit 2008
vor 15 Jahren

OK. Danke euch!