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).
Scarica

Guida Visual Studio 2008