#51: VB.NET – identificare modalità debug o release

Molti di voi sapranno che è possibile compilare un progetto o una soluzione di Visual Basic 2008 in due modalità distinte: DEBUG e RELEASE.

Nella modalità DEBUG vengono mantenuti i simboli interni, al fine di poter disporre di un riferimento di supporto alla verifica del codice inserito. Nella modalità RELEASE, invece, vengono eliminati tutti questi simboli e l’applicazione compilata è pronta alla distribuzione.

Distribuire un’applicazione in modalità DEBUG non solo è inutile ma è anche dannoso: infatti le informazioni possono essere utilizzate per un’operazione di reverse engineering per recuperare il nostro codice VB.NET, ma anche le prestazioni dell’applicazione ne possono risentire in senso negativo. E’ quindi importante, prima di distribuire un’applicazione, passare alla modalità RELEASE e ricompilare il progetto o la soluzione.

Premesso questo, talvolta è importante sapere se un assembly sia stato compilato in modalità DEBUG o RELEASE, per evitare di distribuire l’applicazione dimenticando il passaggio dalla modalità DEBUG alla modalità RELEASE.

Possiamo ottenere questo in modo estremamente semplice, con questi semplici passi:

  1. nella finestra Esplora Soluzioni, attivare il pulsante “Mostra tutti i file”;
  2. nel livello inferiore contenuto nel nodo “My Project” troveremo così il file AssemblyInfo.vb; aprire questo file per visualizzare il codice;
  3. in tale file troveremo una “istruzione” simile alla seguente:
    <Assembly: AssemblyTitle(“WindowsApplication2”)>
  4. commentare tale istruzione con il simbolo di apice oppure eliminare l’intera riga;
  5. inserire il seguente codice:
#If DEBUG Then
<Assembly: AssemblyTitle("MyApplication *** Debug ***")> 
#Else
<Assembly: AssemblyTitle("MyApplication *** Release ***")> 
#End If

A questo punto possiamo compilare in entrambe le modalità per ottenere gli eseguibili (exe) in entrambe le sottocartelle del progetto (debug e release).

Per verificare se un eseguibile (assembly) sia stato compilato in modalità DEBUG o RELEASE, possiamo semplicemente passare con il puntatore del mouse sopra al nome del file eseguibile nella finestra di Esplora risorse, come mostrato nella seguente figura:

Debug-Release

4 pensieri su “#51: VB.NET – identificare modalità debug o release

  1. Ciao Mario, molto interessante.
    Io stavo cercando invece un sistema per verificare se l’applicazione era in esecuzione all’interno dell’IDE oppure in ambiente autonomo.
    Hai qualche idea al proposito ?

    Alex

    "Mi piace"

  2. Ho letto qualcosa a proposito di questo problema, Alessandro, ma non ricordo dove …
    Potresti provare questo trucchetto per VB6, forse funziona ancora: http://www.freevbcode.com/ShowCode.Asp?ID=145, cioè:

    Public Function IsIDE() As Boolean
    On Error GoTo ErrHandler
    ‘because debug statements are ignored when
    ‘the app is compiled, the next statment will
    ‘never be executed in the EXE.
    Debug.Print 1 / 0
    IsIDE = False
    Exit Function
    ErrHandler:
    ‘If we get an error then we are
    ‘running in IDE / Debug mode
    IsIDE = True
    End Function

    "Mi piace"

    • Trovato : http://www.developerfusion.com/code/3942/are-you-running-in-the-ide/

      **********************************
      Previous versions of Visual Basic made it easy to figure out whether you were running your application through the IDE (Integrated Development Environment). It simply allowed you to check which “mode” your application was in. VB.NET, however, isn’t quite as easy-going.

      The most common method of figuring out whether the application is running in the .NET IDE is to check the System.Diagnostics.Debugger.IsAttached property to determine whether if a debugger is attached to the currently executing code. If so, you can safely assume your code is running from within the IDE.

      If you’re designing your own controls, you might also run into the situation where your code is running in design mode—while you only want it to execute during ‘full’ runtime. In this situation, simply check the DesignMode property of your component (that is, from inside your control: Me.DesignMode). If it returns True, you’re running in the IDE—so cut your code short.

      Simple solutions to common questions, and definitely worth remembering.
      **********************

      Unico neo che me.designmode, all’interno di una form non mi restituisce true.

      Bytheway questa cosa mi serve per poter gestire la stringa di connessione a DB dall’ambiente di sviluppo a quello di produzione.

      "Mi piace"

Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.