Durante lo sviluppo di applicazioni è usuale compilare ed eseguire il codice in modalità "Debug", in modo che sia possibile eseguire il debugging con Visual Studio e anche ricevere messaggi di dettagliati per gli eventuali errori.
E' altrettanto usuale inserire del codice che possa aiutarci a comprendere lo stato dell'applicazione durante la sua esecuzione, senza l'obbligo di inserire punti di interruzione nel debug con Visual Studio. Tra l'altro, ci sono alcuni casi in cui il passaggio dall'applicazione a Visual Studio invalida le nostre verifiche, come ad esempio il test relativo al focus di un controllo.
Tali codici possono diventare molto utili e altrettanto numerosi e, solitamente, andrebbero cancellati sia per evitare che siano eseguiti in produzione, sia che usino inutilmente delle risorse. Tuttavia l'operazione manuale di cancellazione prima della build può divenire tediosa e suscettibile di errori che possono compromettere la build stessa; inoltre, in caso di continuo sviluppo, non avere più tali codici o doverli reinserire può creare qualche disagio o perdite di tempo.
A questo frequente scenario, anzichè creare soluzioni personalizzate, può venire in aiuto la compilazione condizionale, in cui alcune istruzioni indicano la validità di un certo blocco di codice in fase di compilazione e possono influenzare quale codice deve essere compilato e quindi diventare parte dell'assembly.
I marcatori predefiniti, e più utilizzati, sono DEBUG e RELEASE, relativi, rispettivameante, alle modalità standard di compilazione predisposte dai template dei progetti di Visual Studio. Possiamo utilizzarli direttamente all'interno del codice in questo modo:
public IEnumerable GetErrors(string propertyName) { #if DEBUG throw new NotImplementedException(); #elseif RELEASE //... #endif }
Qualora si abbia la necessità, possiamo decorare direttamente i metodi con l'attributo Conditional:
[Conditional("DEBUG")] public IEnumerable GetErrors() { throw new NotImplementedException(); }
in modo che la loro esecuzione sia vincolata alla modalità di compilazione.
La compilazione condizionale è molto versatile ed i relativi marcatori possono essere personalizzati; ad esempio, i template dei progetti Silverlight aggiungono il marcatore "SILVERLIGHT", in modo da consentirci di vincolare l'esecuzione di alcune porzioni di codice solo nel caso in cui siano eseguite all'interno del plugin. Questo può risultare molto utile nel caso di sviluppo di una libreria che debba essere condivisa anche in progetti WPF, ma il cui codice debba presentare delle accortezze per essere compatibile anche con Silverlight.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare il colore CSS per migliorare lo stile della pagina
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Migrare una service connection a workload identity federation in Azure DevOps
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Utilizzare Copilot con Azure Cosmos DB
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Eseguire operazioni sui blob con Azure Storage Actions
Generare velocemente pagine CRUD in Blazor con QuickGrid
Cancellare una run di un workflow di GitHub
Criptare la comunicazione con mTLS in Azure Container Apps
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
C# 12: Cosa c'è di nuovo e interessante
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub