Semplificare il deploy di applicazioni Silverlight con la compilazione condizionale

di Alessio Leoncini, in Silverlight 4.0,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi