Guida Visual Studio 2008 di: Giuseppe Marchi 1. Introduzione Le pricipali novità di Visual Studio 2008 L'area di lavoro 2. Editor e designer I principali strumenti di sviluppo ed alcune funzioni dell'area di editing 3. Le finestre Una panoramica sulle finestre presenti nell'area di lavoro Compilazione e debug 4. Strumenti per la compilazione Le fasi di debug e release, gli strumenti per "generare" le applicazioni 5. Breakpoint e debug a runtime Testare, verificare le applicazioni e tenere traccia delle evoluzioni a runtime 6. Soluzioni e progetti Gli strumenti per gestire le impostazioni di soluzioni e progetti 7. Multi-targeting Scegliere la versione del .NET Framework con la quale sviluppare Supporto per lo sviluppo Web 8. L'interfaccia di sviluppo per il Web Gli strumenti per il Web e le novità introdotte nella versione 2008 9. Tipologie di progetto Cosa è possibile sviluppare per il Web e come scegliere la piattaforma di test 10. Progetti per Web Application Come è evoluto il concetto di applicazione Web: i modelli proposti 11. Master page annidate Il supporto visuale per le master page annidate per layout complessi 12. JavaScript e Ajax Debug ed intellisense per codice JavaScript ed applicazioni AJAX-Enabled Supporto per l'accesso ai dati 13. Introduzione alla gestione dei dati Gli strumenti visuali a supporto delle tecnologie .NET per l'accesso ai dati 14. DataSet Designer Costruire in modo visuale oggetti DataSet per la gestione dei DB 15. Object-Relational Designer Costruire in modo visuale il mapping per le entità del database Strumenti per applicazioni desktop 16. Applicazioni Windows Form, WPF e WCF Le migliorie introdotte dal .NET Framework 3.5 al presentation layer e alle comunicazioni 17. Class designer Modellare il diagramma delle classi e aggiungere strutture in modo visuale 18. Nuove feature per il deployment Le novità introdotte per gli strumenti di installazione e distribuzione delle applicazioni Appendice: Shortcut 19. Visual C# Shortcut Le combinazioni di tasti (o scorciatoie) per velocizzare il lavoro con Visual C# 20. Visual Basic.NET Shortcut Le combinazioni di tasti per velocizzare il lavoro con VB.NET Introduzione Visual Studio è il tool di sviluppo Microsoft di punta per lo sviluppo su sistemi Microsoft e ambiente principale di tutta la linea di software per sviluppatori sul .NET Framework. Nato negli anni '90 come editor per sviluppatori Visual Basic, ha visto la sua evoluzione con il passare degli anni passando dalla versione per sviluppo in C++ (1993) alle versioni 2002 e 2003 che supportavano le prime versioni del .NET Framework (1.0 e 1.1). Nel 2005 poi, è stata rilasciata una nuova versione del prodotto in corrispondenza alla diffusione della versione 2.0 del .NET Framework, che ha segnato grossi cambiamenti architetturali su tutto l'ambiente di programmazione. A due anni di distanza della versione 2005, Microsoft lancia una nuova versione dell'IDE, anche questa volta in parallelo con il rilascio della nuova edizione del .NET Framework: la 3.5. Nasce così Visual Studio 2008 (noto nelle fasi di sviluppo sotto il nome di "Orcas"). Sia il .NET Framework sia VS2008 presentano molte novità, in grado di aumentare la produttività degli sviluppatori e la qualità dei prodotti, grazie alle revisioni sul Framework e alle numerose semplificazioni a livello visuale. Troviamo strumenti in grado di supportarci nella costruzione di nuove applicazioni e servizi, basati sulle più recenti tecnologie Microsoft. Possiamo sviluppare ad esempio: • applicazioni Web (ASP.NET 3.5), e applicazioni Ajax-enabled • servizi (Web services) e client WCF , • flussi di lavoro (Windows Workflow Foundation), • applicazioni desktop di impatto con WPF, nei diversi linguaggi di programmazione contemplati dal .NET Framework (da VB.NET a C++) • componenti per Office 2003-2007 (tramite VSTO). Il vantaggio è sempre quello di avere tutto integrato in un ambiente unico con funzionalità di collaborazione per lo sviluppo di progetti in team. Versioni La versione attuale del prodotto risulta la 9.0, mentre per il .NET Framework siamo alla versione 3.5; al suo interno anche il compilatore di C# segna la versione 3.5, mentre quello di VB.NET la 9.0; i rispettivi linguaggi di sviluppo sono infatti presentati come C# 3.0 e VB 9, ASP.NET è 3.5. Inoltre si può notare l'inserimento di librerie già esistenti precedentemente come plug-in esterni, come ad esempio il pacchetto AJAX e o come il SQL Server Database Publishing Wizard. Molti invece risultano i componenti visuali aggiunti, sia per quanto riguarda lo sviluppo Web, sia per lo sviluppo di applicazioni Windows; in sostanza per supportare tutte le novità presenti all'interno del .NET Framework 3.5. Sono stati creati ex-novo dei designer grafici per la creazione e la modifica di pagine Web, per lo sviluppo di applicazioni WPF e per la creazione del modello ad oggetti per i nostri software mappato direttamente sulle tabelle del database correlato. Inoltre, troviamo nuovi wizard per la migrazione dei progetti e una comoda procedura guidata per l'importazione delle impostazioni da Visual Studio 2005. Come nell'edizione 2005 sono disponibili sia versioni a pagamento (Professional Edition, Team Suite, Team Foundation Server e Test Load Agent), sia versioni Express totalmente gratuite, che possono essere liberamente scaricate ed usate. Editor e designer Visual Studio .NET offre un certo numero di designer visuali per il supporto allo sviluppo con le principali tecnologie legate al .NET Framework. I principali sono: • Windows Form designer - per la creazione di applicazioni windows form in maniera visuale; • WPF designer - per la creazione di applicazioni Windows Presentation Foundation (designer aggiunto nella versione 2008 dell'IDE); • ASP.NET designer - un editor WYSIWYG per la costruzione di Web form (nei capitoli successivi vedremo in dettaglio le funzionalità legate a questo particolare designer e allo sviluppo di applicazioni Web ASP.NET); • CSS designer - editor per la creazione e la manutenzione di fogli di stile CSS; • Component designer - editor per lo sviluppo di componenti lato server; XML designer - editor per la generazione e la manutenzione di file XML e di file in formato derivato dall'XML, come fogli di stile XSLT, schemi XSD. Questo editor viene arricchito di ulteriori funzionalità visuali per la costruzione di DataSet per le nostre applicazioni; • Workflow designer - editor per la costruzione in maniera grafica di flusso di lavoro basati sul framework di Windows Workflow Foundation. • Database designer - editor che permette la creazione di tabelle, viste, funzioni e stored procedures in database SQL Express 2005. • Object-Relational designer - editor per la costruzione del mapping tra gli oggetti dell'applicazione e gli oggetti del database, detto Linq to SQL (funzionalità aggiunta nella versione 2008 a fronte della nascita del linguaggio Linq, di cui vedremo le principali funzionalità nei capitoli successivi). • Resource designer - editor per la manutenzione dei file di risorse (.resx) legati ai propri progetti. • Settings designer - editor per la creazione e la gestione di proprietà chiave-valore da utilizzare all'interno delle proprie applicazioni Windows Form o WPF. In generale la parte centrale dell'IDE è dedicata all'editing e fornisce funzionalità comuni a tutti i designer sia testuali che visuali; prima fra tutte risulta l'intellisense. Tramite questo meccanismo è possibile essere supportati durante la stesura del codice delle proprie applicazioni da un menu contestuale che in base alla posizione corrente presenta all'utente le possibili soluzioni da attuare. Questo strumento risulta a dir poco fondamentale, in quanto evita la lettura continua della documentazione delle classi del .NET Framework da utilizzare, proponendo la lista completa di tipi, proprietà, metodi ed eventi per le classi dichiarate all'interno dell'applicazione e per quelle degli assembly esterni referenziati al progetto. • Figura 1. Esempio di Intellisense Interessante è anche la possibilità di inserire dei frammenti di codice sorgente preconfezionati (Code Snippets) per snellire le operazioni più ripetitive. Esistono snippet per cicli, dichiarazioni di proprietà, e costrutti come try e catch, using, etc, che vengono richiamati digitando la parola chiave associata e premendo "Tab" sulla tastiera. Figura 2. Applicare uno snippet In aggiunta, ogni sviluppatore può creare i propri snippet di codice ed utilizzarli all'interno delle proprie applicazioni. L'elenco degli snippet è visualizzabile scegliendo l'opzione "Code Snippets Manager" presente all'interno del menu "Tools" (o digitando lo shortcut Crtl+K+B). Sono state pensate altre due funzioni molto utili (nel menu contestuale che appare cliccando col tasto destro sull'editor dei contenuti): • Refactor - che permette all'utente di modificare i nomi in modo consistente tra le diverse parti del progetto, di estrarre un frammento di codice e formare un nuovo metodo, incapsulare campi e rimuovere o riordinare i parametri in un metodo. • Surround with - che permette all'utente di selezionare un blocco particolare di codice e circondarlo da un particolare statement (scelto dalla lista che propone il menu stesso) come un blocco try e catch, una direttiva using, cicli e blocchi condizionali. Le finestre Le finestre degli strumenti sono poste intorno alla parte centrale e forniscono allo sviluppatore informazioni sul contesto corrente, permettono un rapido accesso ai file della soluzione o al database, o ancora forniscono informazioni sulle classi utilizzate. Possiamo spostare queste finestre a piacimento e ottenere la nostra configurazione ideale, inoltre possiamo attivarle o disattivarle attraverso combinazioni di tasti. Esaminiamone alcune. Solution Explorer (Ctrl+Alt+L) La finestra "Solution Explorer" (Esplora Soluzioni) è tra le più importanti: contiene l'elenco dei progetti legati alla soluzione aperta e mostra tutti i file presenti all'interno di ciascun progetto. Figura 1. Solution Explorer Una soluzione è una sorta di "contenitore di progetti", che possono essere legati tra loro attraverso precisi collegamenti (references), in modo tale da poter comporre in un'unica applicazione le funzionalità sviluppate in livelli differenti. Cliccando con il tasto destro sulla soluzione possiamo aggiungere nuovi progetti, cliccando col destro sul nome del progetto, possiamo aggiungere nuovi elementi in base al tipo di progetto e alla cartella di destinazione. Ad esempio se decidiamo di aggiungere un file all'interno della directory App_Code di una Web application, l'IDE ci proporrà di creare classi, class diagram, DataSet, report, classi "Linq to SQL" o file di testo. Utilizzare bene il Solution Explorer è un buon punto di partenza per sviluppare applicazioni con Visual Studio. Per chi utilizza già Visual Studio 2005 le differenze sono veramente minime, quindi si parte avvantaggiati. Class View (Ctrl+Shift+C) La finestra "Class View" permette di visualizzare tutte le classi presenti all'interno dei progetti della soluzione, divise secondo il progetto di appartenenza. Selezionando una singola classe è possibile visualizzarne tutti i metodi, le proprietà e i campi o semplicemente, con un doppio click, di aprirla all'interno dell'editor di testo. Figura 2. Class View Per ogni progetto è presente anche una lista di tutte le librerie esterne utilizzate (visibili espandendo la cartella "Project References"). Possiamo anche sfruttare la funzione di ricerca per ritrovare classi, proprietà o metodi sia all'interno della soluzione, sia nell'intero .NET Framework. Il Class View risulta molto utile durante lo sviluppo di progetti di grosse dimensioni, divisi in sotto progetti con classi raggruppate in differenti namespace. Properties (F4) La finestra delle proprità permette di visualizzare o impostare il valore delle proprietà di tutti i diversi elementi selezionati. È possibile selezionare gli elementi all'interno delle aree di editing quando impostiamo la modalità visuale dei diversi designer. Se abbiamo selezioniamo un controllo, possiamo anche creare e gestire gli handler per gli eventi ad esso associati. Figura 3. Properties In fondo troviamo uno spazio contenente la descrizione, presa dalla documentazione del .NET Framework, di ciò che si sta modificando. Server Explorer (Ctrl+Alt+S) La finestra "Server Explorer" viene utilizzata per visualizzare le fonti di dati presenti in locale, o su server remoto. Questa finestra ci permette di creare nuove "data-connection", creare tabelle, viste, funzioni, procedure ed è possibile inoltre costruire il diagramma visuale del database, il tutto senza dover utilizzare strumenti esterni. Figura 4. Server Explorer Inoltre per ogni server aggiunto (il primo della lista è il computer locale) è possibile visualizzare l'elenco dei servizi, il log degli eventi, i servizi di crystal report e i contatori di performance. Toolbox (Ctrl+Alt+X) La toolbox (Casella strumenti) è la finestra in cui sono posti tutti i controlli o gli oggetti che possono essere aggiunti ai contenuti trascinati nella finestra di editing sia in visualizzazione design che in visualizzazione codice. Figura 5. Toolbox Gli oggetti presenti in questa finestra cambiano a seconda del tipo di file che si sta utilizzando nell'editor. Se stiamo lavorando su una Web Form, ad esempio, troviamo in toolbox i controlli Web e HTML. Command Window (Ctrl+Alt+A) La finestra dei comandi permette di effetuuare operazioni a riga di comando direttamente all'interno dell'IDE, una alternativa per richiamare ogni tipo di comando senza utilizzare menu, finestre o shortcut. Figura 6. Command Window Alcune operazioni inoltre non sono inserite nelle barre di strumenti e possono essere eseguite solamente dalla Command Window. Anche qui è abilitato l'intellisense, che ci ricorda la sintassi dei vari comandi. Error List Window (Ctrl+\+E) Questa finestra mostra l'elenco degli errori, dei warning e dei messaggi dati da una compilazione del progetto corrente. Figura 7. Error List Window All'interno della tab "Errors" sono presenti gli errori di compilazione che non permettono la generazione degli assembly. I warning sono invece degli avvisi, che permettono comunque la compilazione; esempi di warning sono l'utilizzo di classi marcate come obsolete o l'utilizzo, per esempio, di tag HTML non validi. Task List Window (Ctrl+\+T) Fornisce uno spazio per appuntarci le operazioni (task) ancora da fare e segnare quelle già fatte. Molto utile per non lasciare indietro niente durante lo sviluppo delle nostre applicazioni. Figura 8. Task List Output Window (Ctrl+Alt+O) Ci permette di visualizzare il risultato delle operazioni di compilazione o pubblicazione del progetto corrente. Figura 9. Output Window Find Symbol Results Window (Ctrl+Alt+F12) Permette di visualizzare i risultati della ricerca di tutte le occorrenze di un particolare nome o oggetto all'interno del progetto. La ricerca parte cliccando con il tasto destro su una classe, proprietà, metodo, campo o evento, e selezionando l'opzione "Find all references". Figura 10. Find Symbol Results Window Strumenti per la compilazione Prima di eseguire una applicazione (e sperare che funzioni) è necessario averne compilato tutte le parti senza errori. In Visual Studio lanciamo quella che viene chiamata "Generazione" dell'applicazione. L'ambiente di sviluppo fornisce gli strumenti per generare e testare le applicazioni. Questi strumenti possono essere configurati in modo particolare per ogni singolo progetto, come osserveremo più avanti. Durante la progettazione gli sviluppatori tendono a compilare più volte l'applicazione, per verificarne le funzionalità man mano; questa fase è detta "generazione in Debug" ed è divisa in due parti bene distinte: 1. compilazione e correzione degli eventuali errori di sintassi, incongruenze tra tipi di dati o semplicemente errori di scrittura; 2. test dell'applicazione e del suo funzionamento logico. Queste due fasi vengono eseguite più volte durante lo sviluppo, proprio perché oltre alla correzione di errori che impediscono la compilazione, esistono degli errori (eccezioni) che possono essere scatenati durante l'esecuzione del progetto, che rappresentano quindi errori della logica con cui è stata pensata l'applicazione. Completata la fase di test raggiunti i requisiti funzionali richiesti, è possibile passare alla compilazione finale del progetto, detta "Release". In questa fase è possibile ottimizzare la compilazione in modo tale da aumentare la velocità di esecuzione nei confronti di quanto era disponibile in fase di test. Troviamo le funzioni di ottimizzazione nel menu "Build", che presenta opzioni diverse a seconda del tipo di progetto. Figura 1. Menu Build • • • • • • • • • Build solution - Generazione completa di tutti i progetti inseriti all'interno della soluzione; Rebuild solution - Rigenerazione completa di tutti i progetti della soluzione; Clean solution - Cancellazione di tutti i file risultanti dalle precedenti compilazioni di ogni progetto della soluzione; Build <progetto selezionato> - Generazione del singolo progetto selezionato; Rebuild <progetto selezionato> - Rigenerazione completa del singolo progetto selezionato; Clean <progetto selezionato> - Cancellazione di tutti i file risultanti dalle precedenti compilazioni del solo progetto selezionato; Publish <progetto selezionato> - Pubblicazione del progetto selezionato. Se stiamo sviluppando una applicazione desktop, ci verrà proposto il wizard di pubblicazione dell'applicazione con ClickOnce, se invece lavoriamo ad un sito Web, utilizzeremo il wizard per la pubblicazione di un'applicazione ASP.NET. Batch build - Maschera di opzioni di compilazione e debug dei progetti presenti all'interno della soluzione; Configuration Manager - Maschera di opzioni generali di compilazione e debug, da applicare successivamente ai vari progetti. I risultati di tutte queste operazioni li ritroviamo nella cartella /bin del progetto e nelle sue sottocartelle: in fase di sviluppo e test sarà utilizzata la cartella /bin/Debug, mentre in modalità release la cartella utilizzata sarà bin/Release. Breakpoint e debug a runtime Per verificare il funzionamento logico delle applicazioni, in fase di debug, risulta molto utile seguirne l'esecuzione passo passo. Visual Studio permette questo tipo di analisi mostrando ad ogni step, lo stato di oggetti e variabili. Possiamo indicare i punti in cui vogliamo interrompere l'esecuzione della applicazione inserendo nel codice i cosiddetti breakpoint. Un breakpoint viene visualizzato con una linea rossa in corrispondenza della riga di codice sulla quale si blocca il programma e si può aggiungere o togliere cliccando sulla barra a sinistra dello spazio di editing o premendo il tasto F9. Per avviare il debug di un progetto, scegliere l'opzione "Start Debugging" presente all'interno del menu "Debug" (o in alternativa, premere il tasto F5). Figura 1. Esecuzione passo passo con i breakpoint Una volta avviato il debug ci si può muovere all'interno del codice con il tasto F5 (per passare direttamente al breakpoint successivo), o F11 (per passare alla riga di codice successiva). Passando il puntatore del mouse sopra le variabili facciamo apparire delle finestre che mostrano i valori attuali di ogni campo, oggetto o proprietà. Figura 2. Visualizzare lo stato delle variabili Le stesse informazioni possiamo trovarle anche nelle finestre: , e che rispettivamente visualizzano: • Autos - mostra lo stato delle variabili utilizzate all'interno dello statement corrente (permettendo inoltre di cambiarne i valori per modificare l'esecuzione dell'applicazione a run-time), • Locals - mostra lo stato delle variabili locali all'applicazione (anche in questo caso permettendo di cambiarne i valori nel corso dell'esecuzione), • Watch - mostra lo stato delle variabili che decidiamo di ispezionare, selezionando e spostandole direttamente all'interno della finestra. Figura 3. Finestre Watch Altra funzionalità veramente molto utile, per la fase di debug delle proprie applicazioni (soprattutto per siti ASP.NET o applicazioni basate su Windows Sharepoint Services), è la funzione "Attach to process" presente sempre all'interno del menu "Debug". Questo meccanismo permette all'utente di "attaccare" il debugger presente all'interno dell'IDE ad uno dei processi in esecuzione sulla macchina locale o in remoto (tramite il remote debugger di Visual Studio) e di eseguire operazioni di introspezione su applicazioni che sono già in esecuzione. Per esempio, possiamo selezionare il processo w3wp.exe (processo con cui gira IIS su Windows Server 2003 e Windows Vista) ed avviare il debug di una delle nostre applicazioni ASP.NET già in esecuzione. Figura 4. Attach to process Soluzioni e progetti Per sviluppare applicazioni complesse, risulta utile avere una buona organizzazione del progetto, ordinata e curata nei dettagli. Con Visual Studio possiamo creare diverse tipologie di progetti e raggrupparli in soluzioni uniche. Inoltre possiamo istaurare collegamenti (referneces) tra progetti della medesima soluzione o con assembly esterni. Grazie al Solution Explorer possiamo aggiungere nuovi progetti alla soluzione principale, specificando se questi devono essere creati ex-novo oppure se già presenti sul file system. Questa opzione risulta molto utile, in quanto possiamo aggiungere uno stesso progetto in soluzioni differenti. Nelle nuove versioni dell'IDE esistono tipologie di progetti che non visualizzano la soluzione una volta creati; un esempio perfetto è il progetto di tipo "Web Site". Per questi particolari tipi di progetto Visual Studio crea comunque una soluzione "temporanea", ma si limita a nasconderla nella visualizzazione proposta dal Solution Explorer. È possibile impostare alcune proprietà per gestire al meglio il comportamento della soluzione, queste proprietà si dividono in due gruppi principali, Common Properties e Configuration Properties. Common Properties Startup project - Per specificare il progetto che deve essere fatto partire quando l'utente seleziona l'opzione di debug dell'applicazione (nel caso in cui la soluzione contenga più progetti). Project Dependecies - Per specificare l'ordine con cui i vari progetti devono essere compilati. Questa opzione risulta fondamentale nel caso in cui la soluzione risulta contenere più progetti e questi siano referenziati gli uni con gli altri; in casi del genere infatti, l'ordine di compilazione è una tematica abbastanza critica, da trattare quindi con particolare attenzione. Debug source files - Per specificare i percorsi agli assembly esterni referenziati all'interno dei vari progetti della soluzione, in modo tale che l'IDE sia in grado di presentare opzioni di debug anche per questi oggetti esterni. Configuration Properties Configuration - Per specificare particolari impostazioni di compilazione dei singoli progetti nella soluzione. Questa finestra possiamo aprirla cliccando con il destro sul nome della soluzione dal Solution Explorer e scegliendo l'opzione "Properties". Figura 1. Pagina delle proprietà della soluzione Per quanto riguarda invece le proprietà di ogni singolo progetto, abbiamo la possibilità di accedere a diversi tipi di configurazioni, legate principalmente al tipo di progetto che abbiamo creato. Per applicazioni Windows Forms o WPF, o per librerie di classi, Visual Studio ci mette a disposizione una finestra divisa in tab differenti, uno per ognuna di queste tipologie di proprietà: Tab Descrizione Da questo tab è possibile specificare il nome dell'assembly che dovrà essere generato, il nome del namespace di default, il framework su cui si basa il progetto (questa proprietà specifica verrà spiegata in dettaglio nella prossima lezione) e il tipo di output che dovrà avere la Application compilazione. Inoltre, da questa finestra, è possibile aggiungere un file di chiave .snk per firmare l'assembly generato e in generale per modificarne le proprietà quali Titolo, Autore, Descrizione, Company, Copyright, Guid e versione. Da questo tab è possibile specificare il tipo di configurazione del progetto per la fase di compilazione (Debug o Release), il percorso di output del progetto (cioè dove verranno salvati i Build file dopo la compilazione), opzioni aggiuntive per il trattamento dei warnings e per l'ottimizzazione di codice, trace e debug. Da questo tab è possibile aggiungere degli eventi a riga di comando prima della compilazione o Build dopo di essa. Per esempio possiamo decidere di copiare i file di output su una share di rete o Events comunque in un'altra locazione, tramite il comando copy. Da questo tab è possibile modificare le configurazioni per la fase di debug del progetto selezionato. È possibile abilitare il debug di SQL Server, di codice unmanaged e di Visual Debug Studio .NET stesso; inoltre è possibile specificare programmi opzionali da far partire all'inizio della fase di debug o azioni a linea di comando. All'interno di questo tab è possibile gestire il file di risorse principale legato all'applicazione. Se Resources presente almeno un file di risorse, l'IDE visualizzerà il Resource Designer, tool creato apposta per la manutenzione di file di risorse. In questa parte di configurazione è possibile specificare all'applicazione di abilitare i "Client Application Services", una nuova funzionalità del .NET Framework 3.5 che permette ad applicazioni client di utilizzare i servizi di autenticazione, role manager e profili esposti da Services un'applicazione web ASP.NET 3.5 (per un esempio di questa funzionalità rimandiamo alla lettura di questo articolo (http://www.peppedotnet.it/Articoli/ClientApplicationServices.aspx)). In questo tab è presente il designer per la manutenzione grafica dei file .settings contenenti i settaggi per l'applicazione corrente. All'interno di questo tipo di file è infatti possibile salvare Settings delle coppie chiave-valore da utilizzare all'interno del proprio progetto. Reference Paths Signing Security Publish In questa parte è presente l'elenco di tutti i percorsi di tutte le referenze che contiene attualmente il progetto in questione. Questo tab è fondamentale per segnare il file di manifest per l'installazione dell'applicazione con ClickOnce e per segnare l'assembly compilato come "strong name assembly", attraverso la specifica di una chiave (estensione .snk). Area utile a specificare i permessi per la code access security che la propria applicazione ClickOnce deve avere per poter essere avviata. Tab per la pubblicazione dell'applicazione con il relativo manifest per l'aggiornamento o l'installazione tramite ClickOnce. L'elenco di queste impostazione è visualizzabile cliccando con il destro sul nome del progetto selezionato e scegliendo l'opzione "Properties". Figura 2. Finestra delle impostazioni Le proprietà di un'applicazione Web contengono invece solo le impostazioni di manutenzione dei reference, le opzioni di build, per l'accessibilità e per la fase di startup. Inoltre sono disponibili anche i settings per la generazione del sito. Multi-targeting Nelle versioni precedenti di Visual Studio era possibile solamente creare applicazioni basate su una precisa versione del .NET Framework: Visual Studio 2002 creava applicazioni solamente per la 1.0, la versione 2003 creava applicazioni per il framework 1.1 mentre la versione 2005 lavorava solamente con il framework 2.0; ora è possibile scegliere la versione del framework selezionandola dal menu a discesa nel wizard di creazione di un nuovo progetto. Figura 1. Selezionare la versione del .NET Framework nel wizard di creazione progetto Questa caratteristica, chiamata "Multi-Targeting", segna un notevole passo avanti: non è indispensabile migrare tutte le applicazioni alla versione 3.5 del runtime per utilizzare le funzionalità del nuovo ambiente di sviluppo. Una volta scelto il framework su cui operare, l'IDE adegua le opzioni di generazione dei progetti, l'intellisense, la toolbox e in generale tutti i suoi componenti, al framework scelto. Le stesse tipologie di progetto e di elementi, saranno visibili o meno a seconda della scelta effettuata. Ad esempio, se scegliamo di sviluppare un'applicazione Web (ASP.NET) basata sul .NET Framework 3.5, troveremo nella toolbox tutti i controlli introdotti nella nuova versione (esamineremo le novità sui controlli nei capitoli successivi). Abbiamo visto come scegliere un'edizione del .NET Framework in fase di creazione del progetto, ma se volessimo cambiare scelta in corso d'opera? Anche a progetto avviato possiamo modificare la scelta del framework. Ci basta andare tra le proprietà del progetto e modificare la proprietà "Target Framework" nel "Application". Fatto questo, salviamo le impostazioni del progetto e Visual Studio si occuperà di aggiornare le reference, le opzioni di compilazione e la toolbox in modo tale che si riferiscano tutti alla versione del .NET Framework appena scelta. Figura 2. Modifica del framework a progetto avviato Come è evidente, non sono supportate dal multi-targeting le versioni 1.0 e 1.1 del .NET Framework. Questo perché da quelle versioni sono stati fatti dei cambiamenti architetturali sostanziali a tutto il Common Language Runtime. È anche per questo che viene consigliato di migrare le proprie applicazioni alle nuove versioni del framework, oltre alle novità dal quale si possono ottenere notevoli vantaggi. L'interfaccia di sviluppo per il Web Visual Studio 2008 fornisce agli sviluppatori Web uno strumento completo e versatile per la costruzione di Web application, in particolare mette a disposizione tutto il potenziale di ASP.NET 3.5. Come nelle precedenti versioni, troviamo l'editor visuale (WYSIWYG) che permette di inserire nostre pagine Web tutti gli elementi necessari, dai semplici testi ai controlli ASP.NET, dai tag HTML ai Web services. La novità nella nuova versione, è che questo designer è stato riscritto completamente, basandosi sul motore di Expression Web, il nuovo software Microsoft per il design di siti internet. Esaminiamo alcune evoluzioni. Visualizzazione in modalità mista Oltre alle due modalità di visualizzazione, visuale e codice, viene introdotta la split view, una modalità mista che divide in due l'area di editing mostrando sia la resa grafica, sia il markup della pagina. Figura 1. La modalità mista Attenzione alla sincronizzazione però, le due viste vengono sincronizzate automaticamente ad ogni salvataggio, oppure se le modifiche vengono effettuate nella parte visuale. Se invece andiamo a modificare il markup della pagina, il programma ci invita a cliccare sull'apposito tooltip per effettuare l'allineamento. Gli stili L'intellisense ci suggerisce anche i nomi delle classi definite nei i CSS (interni ed esterni), sia quando inseriamo l'attributo class negli elementi HTML, sia nell'attributo CssClass dei controlli server. È stata aggiunta una finestra per le proprietà dei CSS, simile alla finestra delle proprietà dei controlli lato server di ASP.NET, dalla quale è possibile modificare gli stili legati ad un particolare elemento della pagina sia in visualizzazione design che in visualizzazione codice. La finestra Manage Styles permette di gestire gli stili inseriti all'interno dei CSS legati all'applicazione in maniera de tutto visuale, con preview dello stile selezionato e finestra di modifica dello stile. La modifica è supportata da un'interfaccia completa che contiene tutte le proprietà di stile applicabili allo stile selezionato. Altre funzioni Una delle funzioni più utili e attese è sicuramente l'introduzione del debug e dell'intellisense per il codice JavaScript (tanto da meritare una trattazione a parte). Quando lavoriamo su un progetto di tipo "Web Site", l'ambiente di sviluppo si organizza in modo da offrire specifiche funzionalità per applicazioni web ASP.NET; facendo click con il tasto destro del mouse sul nome del sito abbiamo infatti la possibilità di aggiungere tutte le cartelle particolari di ASP.NET (App_Code, Theme, App_Data, App_Browser, App_GlobalResources, App_LocalResource, App_WebReferences e Bin) e, in fase di inserimento di nuovi item all'interno di una di queste cartelle, la maschera di selezione del tipo di oggetto da inserire, filtrerà gli oggetti in base alla locazione che abbiamo scelto per la creazione. Altra piccola modifica è stata apportata all'intellisense. Nella versione precedente, la finestra con le opzioni copriva in modo irrimediabile il codice intorno all'istruzione su cui appariva. Questo comportamento poteva risultare fastidioso in quanto toglieva la panoramica sul codice su cui si lavora. Ora è possibile nascondere temporaneamente la finestra dell'intellisense tenendo premuto il tasto "Ctrl", per farla riapparire al rilascio del tasto.Molto attesa anche la gestione visuale delle master page annidate. Tipologie di progetto Visual Studio propone alcuni tipi di progetto dedicati allo sviluppo per il Web: • ASP.NET Web Site; • ASP.NET Web Service; • ASP.NET Web Application; • ASP.NET Web Service Application. I primi due template di progetto possono essere selezionati attraverso la voce di menu File>New>Web Site", mentre gli altri due fanno parte di un plug-in particolare, detto "Web Application Projects", di cui vedremo i dettagli nel corso di questa lezione. Una volta creato un nuovo sito web, abbiamo la possibilità di compilarlo nella sua completezza o di compilare pagine singole, entrare in debug per correggere la logica di ogni pagina ed infine pubblicarlo. Le opzioni di compilazione e debug sono le medesime già descritte nelle lezioni precedenti (http://editor.html.it/guide/lezione/3503/strumenti-per-la-compilazione/). In aggiunta quindi, alle funzionalità comuni a tutti i progetti e al designer per pagine Web ASP.NET, è presente un'ulteriore menu nella barra dei menu, con operazioni specifiche per applicazioni Web: il menu "Website", che ci fornisce: • aggiunta di nuovi oggetti o di esistenti; • creazione di nuove directory o aggiunta di uno dei folder speciali di ASP.NET; • l'utility Copy web site, che permette di mantenere sincronizzate le versioni del sito web tra la macchina locale ed un eventuale server di test o di produzione; • aggiunta di reference ad assembly esterni, a web service e a servizi WCF; • visualizzazione delle dipendenze del progetto; • specifica del progetto selezionato come progetto di start-up per la fase di debug; • l'utility ASP.NET Configuration, un sito web di supporto per la specifica della modalità di autenticazione, gestione ruoli, gestione dei valori di applicazione e dei provider del modello proposto dalla versione 2.0 di ASP.NET in poi. Figura 1. Menu Website Queste funzionalità, permettono di configurare molti aspetti della nostra Web application, attraverso particolari wizard, di compilarla (secondo il modello di compilazione lanciato dalla versione 2.0 di ASP.NET) e di pubblicarla, specificando se mantenere o meno le pagine .aspx aggiornabili. Per effettuare i test durante le fasi di sviluppo, è possibile avvalersi di un web server locale, integrato in Visual Studio, che viene avviato per ogni sessione di debug, senza scomodare IIS. In ogni caso è consigliabile, specie per progetti importanti, costruire un ambiente di test che replichi in modo fedele quello che sarà l'ambiente di produzione (tipicamente una configurazione di IIS su Windows Server). Possiamo definire la posizione del progetto all'inizio, nella maschera di creazione di un nuovo sito Web. Possiamo scegliere se utilizzare IIS (opzione HTTP), se utilizzare il Web server integrato in Visual Studio (opzione File System) o se utilizzare il protocollo FTP per la creazione del progetto in remoto. Nota: queste opzioni sono disponibili solo scegliendo i primi due template che abbiamo descritto. Figura 2. Selezionare la posizione del progetto Progetti per Web Application L'add-in di Visual Studio detto "Web Application Projects" è stato creato subito dopo l'uscita della versione 2005 dell'IDE (e poi aggiunto al service pack 1 del prodotto), per dare un'alternativa di compilazione e pubblicazione di siti Web agli sviluppatori che venivano dalle vecchie versioni. La semantica di compilazione di un sito Web, attraverso questo add-in, risulta infatti la stessa di Visual Studio .NET 2003; tale modello di compilazione vede l'accorpamento di tutto il codice presente nelle classi di code-behind di ogni pagina e delle classi presenti nella directory App_Code, all'interno di un unico assembly. Questa funzionalità è stata inserita anche in Visual Studio 2008 e migliorata per supportare tutte le nuove feature di ASP.NET 3.5; in fase di creazione di un nuovo progetto Web è possibile infatti scegliere i due nuovi tipi di template visti precedentemente: • ASP.NET Web Application • ASP.NET Web Service Application che sostituiscono rispettivamente i template "ASP.NET Web Site" e "ASP.NET Web Service", della versione precedente, basati sul modello di compilazione a run-time creato con ASP.NET 2.0. Questi ultimi template, e quindi questo modello di compilazione, sono comunque presenti all'interno dell'IDE scegliendo di creare un nuovo "Web Site" e non un nuovo "Project". Figura 1. Selezione del tipo di progetto Se abbiamo deciso quindi di creare un sito Web basato sul "Web Application Project", tutta la logica di programmazione sarà compilata in un unico assembly, posto sotto la directory /bin dell'applicazione. In questo modo viene completamente sostituito il modello di compilazione attuale di ASP.NET, che era basato completamente sulla generazione a run-time delle classi di code-behind delle pagine web e delle logiche inserite all'interno della directory App_Code. Così facendo abbiamo innanzitutto un certo controllo sui nomi degli assembly, possiamo poi utilizzare classi poste in assembly separati per contenere il codice di code-behind delle pagine del sito, possiamo aggiungere operazioni di pre e post compilazione all'interno di Visual Studio .NET 2008 e costruire applicazioni Web che contengano più sotto-progetti Web. Questa modifica è stata il frutto dell'ascolto di numerosissimi feedback da parte della community di sviluppatori .NET, che continuano a preferire la generazione di un unico assembly a fronte invece della compilazione di più assembly differenti creati in automatico dall'utility di pubblicazione dei siti di Visual Studio 2005. Master page annidate Le master page sono uno strumento utilissimo per la generazione di template per applicazioni Web. La possibilità di creare master page annidate (" title=) tra loro era presente già dalla versione 2.0 di ASP.NET, ma Visual Studio non ne prevedeva ancora il supporto a design-time: la modalità visuale si poteva usare solo per la singola master page. Nel nuovo designer Web è stata aggiunta questa funzionalità, che rende più agile la gestione del layout diviso in master page differenti, una contenuta nell'altra. La visualizzazione gerarchica del layout risulta molto importante, specie quando il portale è complesso, composto da diverse sezioni e magari con template differenti tra loro. In termini pratici, ora è possibile creare una nuova master page ed avere l'opzione "Select master page" nella finestra di creazione. Figura 1. Opzione per creare Master Page annidate Visual Studio creerà la nuova pagina inserendo la direttiva MasterPageFile (che era solita essere utilizzata solo all'interno di content page) con riferimento alla master page appena scelta e un controllo di tipo <asp:Content /> per ogni controllo di tipo <asp:ContentPlaceHolder /> presente nella master page padre. All'interno della master page figlio, possono essere inseriti nuovi place holder di contenuto che verranno ereditati dalle eventuali content page. Esempio di codice per una Master Page annidata <%@ Master Language="C#" MasterPageFile="~/Padre.master" AutoEventWireup="false" CodeFile="Figlio.master.cs" Inherits="Figlio" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="mainContent" Runat="Server"> <table style="width: 100%" cellpadding="0" cellspacing="0"> <tr> <td valign="top" style="width: 200px; background-color: Blue"> <h2>Figlio.master</h2> </td> <td valign="top"> <asp:ContentPlaceHolder ID="centralContent" runat="server"> </asp:ContentPlaceHolder> </td> </tr> </table> </asp:Content> La content page risultante, verrà quindi rappresentata all'interno del designer Web di Visual Studio, in cui appaiono tutti i livelli di layout (le pagine master di livello superiore) e il contenuto al livello corrente. Figura 2. Visualizzazione di una Master Page annidata È importante notare, infatti, che una content page eredita solamente i placeholder dell'ultima master page, quella da cui è stata direttamente creata. JavaScript e Ajax Una delle novità più apprezzate dagli sviluppatori Web è il migliorato supporto per JavaScript con l'intellisense e le funzioni avazate di debug, funzionalità disponibili anche nella versione Express e particolarmente utili per applicazioni Ajax-enabled. L'intellisense si attiva quando scriviamo all'interno di un blocco <script> oppure in un file ".js", esponendo l'elenco degli oggetti disponibili e delle keyword del linguaggio. Inoltre aggiorna costantemente i nomi e i tipi delle variabili a seconda del contesto e delle dichiarazioni implicite. Ad esempio, se creiamo una variabile assegnandole un numero, l'intellisense ci propone, per quella variabile, tutti i metodi esposti da tipi numerici (toString, valueOf, etc.). Se in un secondo momento, assegnamo un valore di tipo stringa alla stessa variabile, l'intellisense si aggiorna e ci propone operazioni e metodi applicabili alle stringhe. Figura 1. Intellisense si adatta definizione implicita dei tipi Inoltre è supportato sia l'intellisense su librerie JavaScript esterne alla pagina che la presenza di messaggi di marcatura per metodi, funzioni e tipi, come documentazione d'aiuto durante o sviluppo. externalFile.js function SayHello(name) { ///<summary>Hello world from JavaScript !</summary> ///<param name="name">Chi vuoi salutare ?</param> alert('Hello ' + name); } Figura 2. Intellisense supporta le librerie JavaScript esterne Per chi lavora su applicazioni Ajax-enabled si tratta di un accessorio veramente importante, basta pensare a quanto semplifichi l'orientamento tra le numerose librerie del framework ASP.NET AJAX. Altra semplificazione: per consumare un web service tramite Ajax, una volta inserita la reference del Web service all'interno di un controllo ScriptManager, Visual Studio crea in automatico la classe proxy per quel Web service e mostra l'intellisense aggiornato con tutti i metodi che il Web service espone. HelloWorld.cs [WebService(Namespace = "http://peppedotnet.it")] [ScriptService] public class HelloWorld : System.Web.Services.WebService { [WebMethod] public string SayHello() { return "Hello World"; } } La possibilità di gestire il debug del codice JavaScript era già presente in Visual Studio 2005, ora è stata migliorata notevolmente. Possiamo gestire blocchi di operazioni Ajax e specificare dei BreakPoint, che saranno verificati prima che la pagina ASP.NET debba essere lanciata, cosa che nella versione precedente non era possibile. Figura 3. Breakpoint nel codice JavaScript Inoltre c'è la possibilità di specificare punti di stop sia nel codice che verrà eseguito lato client (JavaScript) che in quello lato server (C#, VB.NET) e scorrere i vari passi di esecuzione della pagina in un'unica sessione di debug, avvalendosi dell'utilizzo dei noti strumenti di ispezione Match/Locals e dei visualizzatori di supporto, strumenti anche questi notevolmente migliorati nella nuova versione. Introduzione alla gestione dei dati La maggior parte delle applicazioni con cui abbiamo a che fare, si servono di basi di dati per la conservazione ed il recupero di di informazioni. Questo sia che parliamo di applicazioni client che di Web application. Risulta quindi necessario conoscere le tecniche per l'accesso ai dati, siano essi conservati su database, che salvati su altri tipi di archivi (es. XML). Nasce anche l'esigenza di avere uno strumento che semplifichi le più comuni procedure di recupero e salvataggio dei dati, per aumentare la produttività. Visual Studio risponde a queste esigenze fornendo un ambiente che permette di considerare le basi di dati non più come un processo a parte, ma come parte integrante dello sviluppo dell'applicazione stessa. Tra i possibili progetti da creare è stato introdotto il "SQL Server Project", sotto il tab "Database" della maschera "New project". Questo tipo di progetto permette all'utente di creare le proprie funzioni, stored procedure, trigger o tipi personalizzati, in codice .NET managed, da inserire all'interno del proprio database SQL Server. Nota: la funzionalità di poter inserire all'interno della base di dati assembly .NET da alternare all'utilizzo di T-SQL, è stata aggiunta dalle versioni 2005 di SQL Server e di Visual Studio; è disponibile un'intera sezione della documentazione (http://msdn2.microsoft.com/it-it/library/6s0s2at1(VS.80).aspx) a riguardo. Abbiamo già brevemente descritto, in una lezione precedente (http://editor.html.it/guide/lezione/3502/lefinestre/), la finestra "Server Explorer", nella quale è possibile aggiungere una o più "Data Connection", per gestire database. Possiamo stabilire connessioni ad archivi pre-esistenti o di crearne di nuovi, creare tabelle, viste, funzioni, procedure e visualizzare il diagramma del database, il tutto senza dover utilizzare editor esterni. Questo elenco di funzionalità è però disponibile solo per database SQL Server o Oracle. Risulta molto utile, in particolare, poter gestire il database senza installare programmi di gestione esterni (es. SQL Server Management Studio nel caso di SQL Server). Si possono aggiungere tabelle, modificare lo schema di quelle esistenti (es. cambiare il numero di colonne) e visualizzare/inserire/modificare i dati, il tutto all'interno dell'area dei contenuti di Visual Studio, grazie ad una serie di strumenti visuali e wizard che appaiono quando apriamo una tabella in modalità modifica. Figura 1. Tool di gestione del database Il supporto alla gestione dei dati è ampliato dai wizard e dai controlli di tipo Data-Source (http://aspnet.html.it/articoli/leggi/2327/datasource-personalizzati/) che possono essere inseriti all'interno di pagine ASP.NET; il wizard generale permette di selezionare il tipo di Data-Source da utilizzare, poi a seconda della scelta fatta dall'utente, verranno presentate le opzioni riguardanti la specifica fonte di dati scelta e per la selezione di eventuali parametri. Infine, sono disponibili due particolari tipi di designer visuali per la creazione e la gestione di due tipi particolari di file: • .xsd - per la gestione di DataSet tipizzati (http://aspnet.html.it/articoli/leggi/2257/dataset-tipizzaticon-visual-studio/), all'interno di applicazioni basate sulla versione 2.0 del .NET Framework (o superiore); • .dbml - per la gestione di oggetti Linq to SQL (" title=) (funzionalità aggiunta nella versione 2008 dell'IDE con la creazione del linguaggio LINQ - Language-Integrated Query, proprio del .NET Framework 3.5); DataSet Designer Già in Visual Studio 2005, è stato aggiunto un designer per la costruzione di strutture di dati tipizzate a partire dalle tabelle del database. Parliamo dei "DataSet tipizzati", che prendono il nome proprio dalla classe DataSet (namespace System.Data) che ha lo scopo di rappresentare i dati con un modello tabellare/relazionale. Nel designer è possibile lavorare con quattro tipi differenti di oggetti: DataTable Un oggetto, derivato direttamente dalla classe DataTable, (sempre namespace System.Data), in grado di contenere dei dati all'interno di una struttura prestabilita fatta di colonne, chiavi primarie e vincoli. Molto utile per creare facilmente delle rappresentazioni dei dati da utilizzare nelle applicazioni. TableAdapter Un oggetto contenente una DataTable per rappresentare i dati da trattare e un'insieme di query basate proprio su tali dati. Questi oggetti vengono definiti come "classi di Business" e vengono utilizzati da controlli di tipo ObjectDataSource come fonte di informazioni, con l'aggiunta di tutti i meccanismi di inserimento, aggiornamento e cancellazione dei dati. Quando si crea un nuovo TableAdapter, viene chiesta all'utente una query di selezione, la tabella risultante costituisce il materiale per da inserire nella DataTable. Se la query di selezione e lo schema della tabella coinvolta lo permettono, verranno create in automatico tutte le query CRUD legate appunto alla struttura scelta. Inoltre, l'utente è in grado di aggiungere nuove query, magari con l'utilizzo di parametri, con l'unico vincolo di rispettare la selezione delle colonne descritte dal DataTable. Query È possibile inserire all'interno del DataSet generale, una o più query, di aggiornamento, inserimento, cancellazione o di selezione (al massimo di una singola riga) che potranno essere utilizzate in maniera indipendentedal resto degli oggetti definiti all'interno del DataSet padre. Ogni volta che l'utente decide di aggiungere una nuova query infatti, questa verrà associata ad un particolare TableAdapter, creato in automatico dal designer senza alcun DataTable di definizione, con il compito di contenere appunto l'insieme di tutti questi tipi di oggetti. Tale TableAdapter avrà il nome di "QueriesTableAdapter". Relation All'interno del DataSet, le diverse DataTable possono essere correlate tra loro. Le relazioni nel DataSet sono simili a quelle tra le tabelle di un database relazionale, con chiavi primarie e chiavi esterne, vincoli di chiavi e vincoli di cancellazione o modifica a cascata. Ogni relazione viene definita rigorosamente tra due colonne di due DataTable differenti. Il DataSet designer L'insieme di tutti questi oggetti, permette all'utente di creare un set di strutture di dati preso direttamente dalle informazioni contenute nel database e di definire specifiche operazioni di selezione, inserimento, modifica o cancellazione, senza dover ogni volta scrivere tutto il codice. La comodità unica del DataSet Designer di Visual Studio è data dal fatto che semplicemente trascinando una tabella del database, dalla finestra "Server Explorer" all'interno dell'area di contenuto dove è stato aperto il file .xsd, verrà creato in automatico un TableAdapter con un DataSet contenente tutte le colonne proprie della tabella e una query iniziale di selezione di tutte le righe presenti all'interno della tabella scelta; inoltre, vengono create in automatico anche le query di inserimento, modifica e cancellazione. Spostando le tabelle scelte dalla finestra "Server Explorer" all'interno del DataSet tipizzato, l'IDE crea in automatico strutture che possiamo utilizzare tramite controlli di tipo ObjectDataSource e controlli Data-Bound. Il tutto, senza scrivere una riga di codice. Figura 1. Esempio di DataSet Nota: se stiamo sviluppando un'applicazione Web, i file .xsd dovranno risiedere nella cartella speciale App_Code. Object-Relational Designer Con l'arrivo di LINQ (Language-INtegrated Query) nel .NET Framework 3.5 e delle tecnologie figlie (LINQ to DataSet e LINQ to SQL), è stato importante aggiungere a Visual Studio un nuovo designer in grado di assistere lo sviluppatore nella gestione di oggetti e relazioni Linq to SQL. La tecnologia Linq to SQL è un OR/M (Object Relational Mapper) che fornisce un'infrastruttura per manipolare dati relazionali (prelevati da un database SQL Server) come se fossero degli oggetti e permetterci poi di eseguire query CRUD sui dati attraverso LINQ, senza quindi alcuna interazione diretta con la base di dati. Nota: Attualmente il designer Object-Relational supporta solamente SQL Server. Il nuovo designer permette di definire in maniera visuale le entità Linq to SQL, dell'applicazione. Al suo interno, possono essere infatti rappresentate, senza scivere codice: • singole tabelle • relazioni tra tabelle • stored procedures • funzioni • vincoli di ereditarietà tra classi Il designer si occupa inoltre di salvare il mapping tra le classi e gli oggetti del database, in un file con estensione .dbml e di generare un oggetto, figlio della classe DataContext, tipizzato. Questo oggetto ha il compito di gestire tutti i tipi di eventi che vengono scatenati da dalle operazioni effettuate sugli elementi mappati e di gestire le comunicazioni tra le entità definite e la base di dati correlata. Tale oggetto potrà essere utilizzato sia all'interno di controlli di tipo DataSource che da codice attraverso query scritte tramite la sintassi LINQ. Come abbiamo detto quindi, le tabelle della base di dati vengono trasformate dal designer in classi con definite una proprietà per ogni colonna presente nello schema della tabella, mentre le funzioni e le stored procedures, diventano metodi della classe tipizzata figlia di DataContext. Se ad esempio creiamo il file ORM.dbml, verrà creata dal designer la relativa classe ORMDataContext, figlia diretta appunto della classe DataContext. Il designer Object-Relational si presenta agli sviluppatori diviso in due parti: la zona di sinistra, pensata per contenere le entità logiche definite correlate di proprietà, relazioni e vincoli di ereditarietà, la zona di destra, adibita invece per ospitare tutti i metodi che sono stati mappati a stored procedures o a funzioni presenti nella base di dati. Figura 1. Esempio di mapping Una volta creato il mapping a formare il modello ad oggetti dell'accesso ai dati, possiamo visualizzare il codice .NET che il designer ha generato, per gestire le varie entità all'interno dell'applicazione attraverso classi specifiche e metodi di inserimento, aggiornamento o eliminazione. È possibile, inoltre, aggiungere funzionalità custom: possiamo modificare il codice generato dal designer OR, poiché per ogni entità viene generata una classe partial, con proprietà e metodi pre-definiti; il meccanismo delle classi parziali ci permette quindi eventuali aggiunte o modifiche. Una volta compilati, possiamo usare gli oggetti entità generati, all'interno di query basate su LINQ, il nuovo linguaggio di selezione di dati integrato nel .NET Framework. Attraverso esso infatti, potremo eseguire ogni tipo di selezione, inserimento, modifica o cancellazione, senza scrivere una sola riga di codice SQL. È importante notare che, al contrario di quanto accade con il DataSet Designer e i file .xsd, questo designer assieme alla tecnologia Linq To SQL, permette un mapping diretto degli oggetti presenti all'interno della base di dati con delle classi .NET. Applicazioni Windows Form, WPF e WCF Visual Studio è l'ambiente privilegiato per sviluppare applicazioni client che sfruttano Windows Form, WPF (Windows presentation foundation) come framework per il presetation-layer e WCF (Windows Comunication Foundation) per i servizi di comunicazione. Come per lo sviluppo web e la gestione dei dati, abbiamo a disposizione designer specifici, wizard e finestre di strumenti. I designer Windows Form e il nuovo designer WPF forniscono il visuale necessario alla costruzione delle interfacce in ambiente Windows. Si possono trascinare gli elementi dalla toolbox (aggiornata secondo il tipo di progetto scelto) e sistemarli a piacimento, aiutati da un sistema di posizionamento automatico e di "docking" degli elementi. Figura 1. Esempio di "docking" assistito Possono venirci in aiuto funzionalità di alcune delle finestre già descritte in una lezione precedente (http://editor.html.it/guide/lezione/3502/le-finestre/), che aggiornano aspetto e funzioni in base alle tipologie degli oggetti selezionati nell'area dei contenuti. Nella toolbox troviamo componenti utili allo sviluppo di applicazioni WCF e WPF, che vengono visualizzati quando sviluppiamo applicazioni basate sulle versioni 3.0 e 3.5 del .NET Framework. Entrambe le tecnologie, WPF e WCF, nella versione 3.5 sono migliorate in termini di prestazioni e di funzionalità. In WPF le migliorie si avvertono nelle performance di animazioni, binding dei dati e finestre a livelli. Sono state riviste anche le funzionalità delle applicazioni Web (XBAPs, XAML Browser Applications). È stato aggiunto infatti il supporto per Firefox e per l'utilizzo e la gestione dei cookie. Altra novità interessante, è quella per lo sviluppo di add-in visuali e non visuali per applicazioni WPF. La maggior parte delle applicazioni Microsoft offre add-in per consentire ad altre applicazioni di sfruttarne le funzionalità: esempi ideali sono il pacchetto Office, i Windows Media Services, Internet Explorer e Visual Studio stesso. Il .NET Framework 3.5 offre un insieme di classi, posti sotto il namespace System.AddIn, in grado di offrire funzionalità per i comportamenti standard degli add-in. Questi comportamenti vanno dall'attivazione, all'isolamento dell'add-in, alle funzionalità di configurazione, comunicazione con l'esterno ed aggiornamento. Per ulteriori informazioni su modello per add-in, rimandiamo a questa pagina (http://msdn2.microsoft.com/en-us/library/bb909794(VS.90).aspx) della documentazione. WPF Designer Il designer per applicazioni WPF esisteva già nella nella versione 2005 di Visual Studio ma era solo una parte di un'add-in addirittura in versione CTP. Ora questo strumento ci presenta diverse caratteristiche interessanti per operare sulle interfacce: • doppia visualizzazione di markup XAML e rich editor visuale, in cui le modifiche vengono sincronizzate da una parte all'altra della finestra; • Supporto per la visualizzazione grafica di controlli custom; • Aggiunta di uno slider per effettuare zoom-in e zoom-out sull'interfaccia grafica della propria applicazione; • Possibilità di fermare il caricamento della visualizzazione grafica di file .xaml corposi; • Supporto allo sviluppo di codice XAML attraverso l'intellisense; • Supporto alla personalizzazione tramite la toolbox dei controlli e la finestra delle proprietà; • Presenza di linee di supporto per il posizionamento dei controlli all'interno della finestra; • Tag navigator, strumento che visualizza la posizione del relativo tag XAML all'interno dell'albero di markup a fronte della selezione di un particolare controllo effettuata in design view. Inoltre, il designer WPF offre supporto per la collaborazione con Expression Blend: grazie ad un formato di lavoro condiviso (XAML) e della condivisione della relativa soluzione, è possibile separare il lavoro di programmatori e designer. Le novità del framework di comunicazione • • • • • • • • il supporto ad AJAX per consumare servizi WCF; il supporto per il formato JSON (JavaScript Object Notation); la possibilità di creazione di servizi durevoli nel tempo; il supporto per lo sviluppo di servizi WCF stile web, attraverso un modello di programmazione; un miglioramento delle comunicazioni tra WCF e Workflow Foundation, attraverso i Workflow Services; la possibilità di utilizzo di meccanismi di comunicazione WCF in applicazioni "partially trusted"; linteroperabilità tra web service WCF; l'integrazione con i formati RSS e ATOM (WCF Syndacation); Nuove feature per il deployment La tecnica di deployment delle applicazioni detta ClickOnce permette di creare le strutture necessarie all'installazione e distribuzione di applicazioni desktop. Tale tecnica, già presente nella precedente versione dell'IDE, è stato notevolmente migliorata in Visual Studio 2008 attraverso l'aggiunta di nuove caratteristiche di base. Ora possiamo decidere se e come l'applicazione dovrà controllare la presenza di aggiornamenti: possiamo impostare il controlllo in fase di setup o a intervalli regolari, oppure utilizzare la classe ApplicationDeployment (namespace System.Deployment.Application) per far scattare il controllo allo scatenarsi di particolari eventi o in base al tempo segnato da un timer. Tale classe espone metodi per effettuare richieste al server sia in maniera sincrona che asincrona. È stato abilitato il deployment di applicazioni da differenti locazioni della rete senza dover cambiare il manifest dell'applicazione o senza effettuarne il re-signing. Questa funzionalità risulta perfetta per distribuire gli aggiornamenti, soprattutto per chi sviluppa software di terze parti, in quanto permette la firma sull'applicazione con le informazioni del cliente finale. Nuova è anche la possibilità di effettuare il deployment con ClickOnce di applicazioni Web WPF (XBAPs, XAML Browser Applications) attraverso una semplice interfaccia che permette di specificare tutti i valori di configurazione della propria applicazione, con particolare riguardo per le impostazioni sulla sicurezza. Aggiunto il supporto completo a Windows Vista: è possibile creare il manifest per la propria applicazione sotto il controllo dello User Account Control (UAC) e la generazione dei meccanismi di installazione per applicazioni basate su VSTO (Visual Studio Tools for Office), come add-in per Word, Excel, PowerPoint o Outlook. Importantissima è sicuramente l'eliminazione dell'attributo deploymentProvider dal manifest delle applicazioni da installare, in modo tale da effettuare il deployment di applicazioni ClickOnce sia per un utilizzo on-line che off-line. Il vincolo in questo scenario è quello di non poter modificare la locazione dell'installazione durante eventuali aggiornamenti dell'applicazione. Infine è stato aggiornato il meccanismo con cui ClickOnce è in grado di cambiare la locazione per il deployment dell'applicazione e di far scadere il relativo certificato. In tutto ciò, il tool Mage.exe, utilizzato per generare il manifest per applicazioni ClickOnce è stato modificato ed aggiornato alla versione 3.5 del .NET Framework. Visual C# Shortcut Questo l'elenco dei principali shortcut di Visual C# .NET in Visual Studio 2008. CTRL+M, O CTRL+K, C CTRL+E, C CTRL+K, U CTRL+E, U CTRL+K, D CTRL+E, D CTRL+K, F CTRL+E, F CTRL+K, X CTRL+K, S TAB CTRL+H Editing Collassa le region esistente all'interno della classe aperta Commenta la parte di codice selezionata Decommenta la parte di codice selezionata Formatta la classe aperta secondo le informazioni di indentazione specificate nelle opzioni di configurazione dell'IDE Formatta il codice selezionato secondo le informazioni di indentazione specificate nelle opzioni di configurazione dell'IDE Visualizza il menu contestuale per l'inserimento di un Code Snippet Visualizza il menu contestuale per circondare la parte di codice selezionata con un particolare costrutto Inserisce l'intero Code Snippet scelto dal menu contestuale Apre il menu per la sostituzione di caratteri (Replace) Files CTRL+SHIFT+N Visualizza la finestra di creazione nuovo progetto CTRL+SHIFT+O Visualizza la finestra di apertura di un progetto già esistente CTRL+SHIFT+C Visualizza la finestra per l'aggiunta di un nuovo elemento al progetto corrente CTRL+SHIFT+A Visualizza la finestra per l'aggiunta di un elemento già esistente al progetto corrente CTRL+O Visualizza la finestra di apertura di un singolo file Intellisense CTRL+SPACE Completa la selezione corrente del menu contestuale dell'intellisense CTRL+J Visualizza il menu contestuale dell'intellisense Visualizza la dichiarazione completa dell'identificatore specifico scelto all'interno CTRL+K, I del menu contestuale dell'intellisense CTRL+SHIFT+SPACE Visualizza la dichiarazione dei parametri di uno specifico metodo Permette di far diventare temporaneamente trasparente il menu contestuale CTRL dell'intellisense SHIFT+F12 F12 F8 CTRL+K, CTRL+V CTRL+SHIFT+F ALT+F12 F7 SHIFT+F7 CTRL+F CTRL+G Navigazione Ricerca tutte le referenze del particolare identificatore scelto Permette di navigare nella dichiarazione del simbolo selezionato all'interno del codice Muove il cursore all'elemento successivo all'interno della finestra dei Task e nella finestra Find Results Dispone il focus sulla textbox di ricerca della finestra Class View Visualizza la finestra di ricerca caratteri all'interno del codice Visualizza la finestra di ricerca di un simbolo all'interno del codice Visualizza la parte di codice del file aperto all'interno dell'editor di testo Apre la visualizzazione in Design del file aperto all'interno dell'editor di testo Apre la finestra di ricerca all'interno del file Apre la finestra di GoTo, per spostare il cursore alla riga scelta Window CTRL+W, C CTRL+W, D CTRL+W, A CTRL+W, E CTRL+W, J CTRL+W, O CTRL+W, P CTRL+W, S CTRL+W, T CTRL+W, X CTRL+W, L CTRL+F4 SHIFT+ESC CTRL+R, E CTRL+R, I CTRL+R, M CTRL+R, V CTRL+R, O Visualizza la finestra Class View Visualizza la finestra Code Definition Visualizza la finestra Command Window Visualizza la finestra Error List Visualizza la finestra Object Browser Visualizza la finestra Output Visualizza la finestra Properties Visualizza la finestra Solution Explorer Visualizza la finestra Task List Visualizza la finestra ToolBox Visualizza la finestra Server Explorer Chiude la finestra aperta correntemente Chiude la finestra degli strumenti che ha al momento il focus Refactoring Visualizza la finestra "Encapsulate Field", che permette la creazione di una proprietà da un field esistente Visualizza la finestra "Extract Interface", che permette la creazione di un'interfaccia con tutti i membri presenti all'interno della classe corrente Visualizza la finestra "Extract Method", che permette la creazione di un nuovo metodo a partire dalla parte di codice selezionata Visualizza la finestra "Remove Parameters", che permette di rimuovere uno o più parametri dalla definizione di un particolare metodo Visualizza la finestra "Reorder Parameters", che permette di modificare l'ordine dei parametri di un particolare metodo Debug Visualizza la finestra "Autos", che permette di visualizzare lo stato delle variabili presenti nella CTRL+D, A riga di codice corrente e nelle precedenti Visualizza la finestra "Call Stack", che permette di visualizzare la lista di tutti i metodi attivi CTRL+D, C per il thread corrente Visualizza la finestra "Immediate", che permette di valutare in tempo reale particolari CTRL+D, I espressioni Visualizza la finestra "Locals", che permette di visualizzare tutte le variabili e il loro valore CTRL+D, L corrente Visualizza la finestra "Quick View", che permette di visualizzare il valore corrente CTRL+D, Q dell'espressione collezionata F5 Avvio della fase di debug dell'applicazione corrente CTRL+F5 Avvio dell'applicazione senza avviare anche il debug F11 Esegue un segmento di codice alla volta durante la fase di debug dell'applicazione F10 Esegue la riga successiva di codice, senza seguire l'esecuzione di alcuna chiamata a metodi SHIFT+F5 Termina la sessione corrente di debug CTRL+D, Visualizza la finestra "Watch", che permette di visualizzare i valori delle variabili selezionate o di particolari espressioni W CTRL+F9 Abilita o disabilita i breakpoint Build F6 Compila tutti i progetti inseriti all'interno della soluzione corrente SHIFT+F6 Compila il progetto selezionato La lista completa degli shortcut di Visual C# è disponibile sul sito Microsoft (http://www.microsoft.com/downloads/details.aspx?familyid=e5f902a8-5bb5-4cc6-907e472809749973&displaylang=en&tm). Visual Basic.NET Shortcut Questo l'elenco dei principali shortcut di Visual Basic .NET in Visual Studio 2008. Editing CTRL+K, CTRL+C CTRL+K, CTRL+U CTRL+Z CTRL+SHIFT+Z CTRL+Y CTRL+ENTER CTRL+SHIFT+W CTRL+K, CTRL+D CTRL+K, CTRL+F CTRL+H Commenta la parte di codice selezionata Decommenta la parte di codice selezionata Annulla operazione Ripete ultima operazione Taglia la riga di codice corrente Inserimento di una riga bianca Selezione di una parola Formatta la classe aperta secondo le informazioni di indentazione specificate nelle opzioni di configurazione Formatta il codice selezionato secondo le informazioni di indentazione specificate nelle opzioni di configurazione Apre il menu per la sostituzione di caratteri (Replace) Build CTRL+SHIFT+B Compilazione di tutti i progetti nella soluzione corrente Intellisense CTRL+SPACE Completa la selezione corrente del menu contestuale dell'intellisense CTRL+J Visualizza una lista filtrata di opzioni TAB ENTER Seleziona la voce scelta all'interno del menu dell'intellisense SPACE ESC Chiude la finestra corrente dell'intellisense CTRL Permette di far diventare temporaneamente trasparente il menu contestuale dell'intellisense File CTRL+N Visualizza la finestra di creazione nuovo progetto CTRL+SHIFT+N CTRL+O Visualizza la finestra di apertura di un progetto già esistente CTRL+SHIFT+O CTRL+SHIFT+A Visualizza la finestra per l'aggiunta di un nuovo elemento al progetto corrente CTRL+D Visualizza la finestra per l'aggiunta di un elemento già esistente al progetto corrente Snippet ?+TAB Visualizza la finestra di scelta dei Code Snippet Snippet shortcut+TAB Inserimento di un Code Snippet all'interno del codice "property"+TAB Inserimento del Code Snippet per la creazione di una proprietà CTRL+SPACE Permette il completamento tramite intellisense dello shortcut scritto parzialmente ALT+F12 ALT+SHIFT+F12 CTRL+F F3 SHIFT+F3 ALT+I ALT+F3, S Ricerca Visualizza la finestra per la ricerca di un simbolo Visualizza la finestra per la ricerca di tutte le referenze di un simbolo Muove il cursore al successivo risultato della ricerca Muove il cursore al precedente risultato della ricerca Attivazione della ricerca incrementale Ferma la ricerca corrente Navigazione F12 SHIFT+F12 CTRL+SHIFT+F2 CTRL+SEGNO MENO(-) CTRL+SHIFT+SEGNO MENO(-) CTRL+FRECCIA SU CTRL+FRECCIA GIÙ CTRL+TAB F7 SHIFT+F7 CTRL+ALT+T Ricerca tutte le referenze dell'indetificatore selezionato Muove il cursore alla linea di codice precedente Muove il cursore alla linea di codice successiva Muove il cursore al metodo precedente Muove il cursore al metodo successivo Visualizza la finestra "IDE Navigator", che permette di vedere l'elenco dei file aperti Visualizza la parte di codice del file aperto all'interno dell'editor di testo Apre la visualizzazione in Design del file aperto all'interno dell'editor di testo Visualizza la finestra "Document Outline Window" CTRL+K CTRL+G CTRL+K,CTRL+N CTRL+K,CTRL+P CTRL+K,CTRL+L CTRL+\E F2 F4 CTRL+R SHIFT+ALT+D CTRL+ALT+X CTRL+ALT+S CTRL+F4 SHIFT+ESC CTRL+L CTRL+G Aggiunge o rimuove un segnaposto (bookmark) Apre la finestra di GoTo, per spostare il cursore alla riga scelta Sposta il focus sul precedente segnaposto Sposta il focus sul successivo segnaposto Elimina tutti i segnaposto Window Visualizza la finestra Error List Visualizza la finestra Object Browser Visualizza la finestra Properties Visualizza la finestra Solution Explorer Visualizza l'elenco dei Data Source Visualizza la finestra ToolBox Visualizza la finestra Server Explorer Chiude la finestra aperta correntemente Chiude la finestra degli strumenti che ha al momento il focus Debug Visualizza la finestra "Call Stack", che permette di visualizzare la lista di tutti i metodi attivi per il thread corrente Visualizza la finestra "Immediate", che permette di valutare in tempo reale particolari espressioni Visualizza la finestra "Quick Watch" Visualizza la finestra di allacciamento ad un processo per la fase di debug Avvio della fase di debug dell'applicazione corrente Avvio dell'applicazione senza avviare anche il debug SHIFT+F9 CTRL+ALT+P F5 CTRL+F5 F11 Esegue un segmento di codice alla volta durante la fase di debug dell'applicazione F8 Esegue la riga successiva di codice, senza seguire l'esecuzione di alcuna chiamata a F10 SHIFT+F8 metodi CTRL+ALT+BREAK Termina la sessione corrente di debug CTRL+B Visualizza la nuova finestra dei breakpoint CTRL+F9 Abilita o disabilita i breakpoint La lista completa degli shortcut di VB.NET è disponibile sul sito Microsoft (http://207.46.19.190/downloads/details.aspx?FamilyID=255b8cf1-f6bd-4b55-bb42-dd1a69315833&displaylang=en).