Www.devleap.it Introduzione al.NET Framework Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail:...

Post on 01-May-2015

220 views 0 download

Transcript of Www.devleap.it Introduzione al.NET Framework Marco Russo MCSD MCAD MCSE+I MCSA MCDBA MCT Mail:...

www.devleap.itwww.devleap.it

Introduzione al .NET Introduzione al .NET FrameworkFramework

Marco RussoMarco RussoMCSD MCAD MCSE+I MCSA MCDBA MCTMCSD MCAD MCSE+I MCSA MCDBA MCT

Mail: marco@devleap.itMail: marco@devleap.itItalian blog: http://blogs.devleap.com/marco.blogItalian blog: http://blogs.devleap.com/marco.blog

www.devleap.it

DevLeap? Che roba è?DevLeap? Che roba è?• www.DevLeap.itwww.DevLeap.it• Un gruppo di 5 persone con tanta voglia Un gruppo di 5 persone con tanta voglia

didi• Studiare a fondo le tecnologieStudiare a fondo le tecnologie• Capire il “behind the scenes”Capire il “behind the scenes”• Implementare soluzioni realiImplementare soluzioni reali• Confrontarsi con le problematiche realiConfrontarsi con le problematiche reali• Sperimentare nuove ideeSperimentare nuove idee

• Facciamo Corsi, Conferenze, TrainingFacciamo Corsi, Conferenze, Training• Scriviamo libriScriviamo libri

• http://www.devleap.it/fullcontacthttp://www.devleap.it/fullcontact

www.devleap.it

Chi siete ?Chi siete ?• Chi conosce Java?Chi conosce Java?• Chi conosce Visual Basic?Chi conosce Visual Basic?• Chi conosce C++?Chi conosce C++?• Chi conosce COM?Chi conosce COM?

www.devleap.it

AgendaAgenda• Perché .NETPerché .NET• Common Language RuntimeCommon Language Runtime• Semplificazione: sviluppo e deploymentSemplificazione: sviluppo e deployment• Affidabilità del codiceAffidabilità del codice• Principali servizi del FrameworkPrincipali servizi del Framework• Piattaforma multi-linguaggioPiattaforma multi-linguaggio• Unificazione modello programmazioneUnificazione modello programmazione• Librerie disponibiliLibrerie disponibili

www.devleap.it

Perché .NETPerché .NET• Attuali tecniche di programmazione:Attuali tecniche di programmazione:

• Server: C++, Java, T-SQL, …Server: C++, Java, T-SQL, …• Middle-tier: VB, C++, …Middle-tier: VB, C++, …• Web Presentation: ASP, JSP, PHP, …Web Presentation: ASP, JSP, PHP, …• Web Client: Jscript, VBscriptWeb Client: Jscript, VBscript• Rich-client: VB, C++, Java, …Rich-client: VB, C++, Java, …• Protocolli: HTTP, XML-RPC, DCOM, CORBA, …Protocolli: HTTP, XML-RPC, DCOM, CORBA, …

www.devleap.it

Perché .NETPerché .NET• Difficile effettuare sviluppo omogeneoDifficile effettuare sviluppo omogeneo• Molto tempo viene dedicato a far Molto tempo viene dedicato a far

comunicare i vari “strati”comunicare i vari “strati”• Serve un salto qualitativo per Serve un salto qualitativo per

semplificare lo scenariosemplificare lo scenario• Ma non c’era COM ?Ma non c’era COM ?

www.devleap.it

Prima di COMPrima di COM

Prima di COM, le applicazioni erano entità completamente separate, senza integrazione

Applicazione

Codice e strutture dati

www.devleap.it

L’era di COML’era di COM

COM fornisce un meccanismo per integrare dei componenti.Ogni componente deve però fornire dei “contatti” e gli oggetti non possono interagire direttamente

www.devleap.it

.NET: oltre l’era di COM.NET: oltre l’era di COM

Con “.NET Framework Common Language Runtime”, i componenti sono costruiti su uno strato comune. Gli oggetti interagiscono direttamente.

www.devleap.it

Architettura .NET FrameworkArchitettura .NET Framework

Base Class Library

Common Language Specification

Common Language Runtime

Data and XML

VB C++ C#V

isual S

tud

io.N

ET

JScript …

WebServices

UserInterface

www.devleap.it

Cosa è .NETCosa è .NET• È un ambiente di esecuzioneÈ un ambiente di esecuzione

(runtime environment)(runtime environment)• Semplifica lo sviluppo e il deploymentSemplifica lo sviluppo e il deployment• Aumenta l’affidabilità del codiceAumenta l’affidabilità del codice• È completamente indipendente da COMÈ completamente indipendente da COM• È fortemente integrato con COMÈ fortemente integrato con COM• Unifica il modello di programmazioneUnifica il modello di programmazione

www.devleap.it

Ambiente di esecuzioneAmbiente di esecuzione• Concetti chiave:Concetti chiave:

• MSIL: Microsoft Intermediate LanguageMSIL: Microsoft Intermediate Language• CLR: Common Language RuntimeCLR: Common Language Runtime• CTS: Common Type SystemCTS: Common Type System• CLS: Common Language SpecificationCLS: Common Language Specification

www.devleap.it

Codice MSILCodice MSIL

Codicenativo

OutputCompilatoreJIT

CodiceMSIL

(Assembly).EXE/.DLL

Compilatore.NET

Sorgenti

www.devleap.it

Common Language RuntimeCommon Language Runtime

Base Class Library

Common Language Specification

Common Language Runtime

Data and XML

VB C++ C#V

isual S

tud

io.N

ET

JScript …

WebServices

UserInterface

www.devleap.it

Common Language RuntimeCommon Language Runtime• IL CLR offre vari servizi alle applicazioniIL CLR offre vari servizi alle applicazioni

Managed code (MSIL)

Sistema operativo (Win32, …)

Common Language Runtime (CLR)

Funzionalità esistenti (es. I/Osu file) mediate da CLR

Funzionalità specifiche di CLR(es. Garbage Collection)

www.devleap.it

Common Language RuntimeCommon Language Runtime• Sviluppo iniziato nel ’97Sviluppo iniziato nel ’97• Nato inizialmente come ambiente di Nato inizialmente come ambiente di

esecuzione migliorato per COM+esecuzione migliorato per COM+• Metadati distribuiti in troppe posizioni Metadati distribuiti in troppe posizioni

diversediverse• RegistryRegistry• COM+ catalogCOM+ catalog• DLLDLL

• Modello nuovo per fare cose vecchieModello nuovo per fare cose vecchie• Sviluppo di una API (C, C++)Sviluppo di una API (C, C++)• Sviluppo di wrapper COM per l’APISviluppo di wrapper COM per l’API

www.devleap.it

Common Language RuntimeCommon Language Runtime

Class Loader

IL to NativeCompilers

CodeManager

GarbageCollector

Security Engine Debug Engine

Type Checker Exception Manager

Thread Support COM Marshaler

Base Class Library Support

www.devleap.it

Sviluppo semplificatoSviluppo semplificato

• Ambiente object-orientedAmbiente object-oriented• Qualsiasi entità è un oggetto Qualsiasi entità è un oggetto • Classi ed ereditarietà pienamente supportatiClassi ed ereditarietà pienamente supportati• Anche tra linguaggi diversi !Anche tra linguaggi diversi !

• Riduzione errori comuni di Riduzione errori comuni di programmazioneprogrammazione• Linguaggi fortemente tipizzatiLinguaggi fortemente tipizzati• Errori non gestitiErrori non gestiti• Meno memory leak: Garbage CollectorMeno memory leak: Garbage Collector

www.devleap.it

Indipendenza dalla piattaformaIndipendenza dalla piattaforma

• .NET è un’implementazione di CLI.NET è un’implementazione di CLI• Common Language InfrastructureCommon Language Infrastructure

• CLI è uno standard ECMA, definito con CLI è uno standard ECMA, definito con C#C#• ECMA-334, ECMA-335ECMA-334, ECMA-335

• Esistono già altre implementazioni di Esistono già altre implementazioni di CLI:CLI:• SSCLI (Microsoft, per Windows, FreeBSD e SSCLI (Microsoft, per Windows, FreeBSD e

Macintosh)Macintosh)• Mono (per Linux)Mono (per Linux)• DotGNUDotGNU• Intel OCL (Open CLI Library)Intel OCL (Open CLI Library)• ……

www.devleap.it

Deployment semplificatoDeployment semplificato• AssemblAssemblyy

• Unità minima per la distribuzione, il Unità minima per la distribuzione, il versioning e la securityversioning e la security

• Simile alle DLL, ma aggiunge meta-dati sul Simile alle DLL, ma aggiunge meta-dati sul contenuto attraverso il “Manifest”contenuto attraverso il “Manifest”

• Può essere composto da uno o più filePuò essere composto da uno o più file• Il manifest può risiedere in un file EXE/DLL Il manifest può risiedere in un file EXE/DLL

separato, oppure in un EXE/DLL che contiene separato, oppure in un EXE/DLL che contiene codice dell’assemblycodice dell’assembly

ApprofondimentApprofondimento:o:www.devleap.www.devleap.itit

Marco Russo
Demo Assembly e metadati con ILDASM?

www.devleap.it

AssemblyAssembly

Assembly a modulo singolo

Codice IL

Metadati

Manifest

Modulo(file PE)

www.devleap.it

Deployment semplificatoDeployment semplificato• Installazione senza effetti collateraliInstallazione senza effetti collaterali

• Le applicazioni e i componenti possono Le applicazioni e i componenti possono sempre essere condivisi o privatisempre essere condivisi o privati

• Esecuzione sEsecuzione side-by-sideide-by-side• Diverse versioni dello stesso componente Diverse versioni dello stesso componente

possono coesistere, anche nello stesso possono coesistere, anche nello stesso processoprocesso

www.devleap.it

Dove sono gli assemblyDove sono gli assembly• Assembly privatiAssembly privati

• Directory applicazione (e sub-directory)Directory applicazione (e sub-directory)

• Assembly condivisiAssembly condivisi• Global Assembly Cache (GAC)Global Assembly Cache (GAC)• c:\windows\assemblyc:\windows\assembly

• Assembly scaricati da URLAssembly scaricati da URL• Download cacheDownload cachec:\Documents and Settings\%USERNAME%\Local Settings\Application Data\assembly\dl2c:\Documents and Settings\%USERNAME%\Local Settings\Application Data\assembly\dl2

GACUTIL.EXEGACUTIL.EXE• Tool per esaminare GAC e download cacheTool per esaminare GAC e download cache

www.devleap.it

Deployment degli assemblyDeployment degli assembly• XCOPYXCOPY

• Applicazioni ASP.NETApplicazioni ASP.NET

• .CAB.CAB• Applicazioni Windows Forms - Code Applicazioni Windows Forms - Code

DownloadDownload

• .MSI (Windows Installer).MSI (Windows Installer)• Applicazioni Windows FormsApplicazioni Windows Forms• Installazione in GAC di assembly condivisiInstallazione in GAC di assembly condivisi• Configurazione shortcutConfigurazione shortcut

www.devleap.it

Sicurezza e affidabilità del codiceSicurezza e affidabilità del codice• Separazione spazi di memoria in un Separazione spazi di memoria in un

processo con AppDomainprocesso con AppDomain• Controllo del codice e sicurezza dei tipiControllo del codice e sicurezza dei tipi

• Sono impediti cast non sicuri, variabili non Sono impediti cast non sicuri, variabili non inizializzate, accessi ad array oltre i limiti di inizializzate, accessi ad array oltre i limiti di allocazioneallocazione

• Garbage Collector per tutti gli Garbage Collector per tutti gli oggetti oggetti .NET.NET

• Gestione delle eccezioniGestione delle eccezioni• Miglioramento della diagnostica di erroreMiglioramento della diagnostica di errore• Integrata con Integrata con Windows SEHWindows SEH

Marco Russo
Demo Garbage Collector più avanti

www.devleap.it

Application DomainApplication Domain• Unità di elaborazione in .NETUnità di elaborazione in .NET• Un processo può avere più AppDomainUn processo può avere più AppDomain• Si può scaricare un AppDomain, non un Si può scaricare un AppDomain, non un

assemblyassembly• Relazione thread – AppDomainRelazione thread – AppDomain• Runtime host creano AppDomainRuntime host creano AppDomain

• ASP.NET, Internet Explorer, Shell, …ASP.NET, Internet Explorer, Shell, …

• Gestione diretta degli AppDomainGestione diretta degli AppDomain

Marco Russo
Spiegare a voce vantaggi di prestazioni dati dagli AppDomain per chiamate tra componenti normalmente separati in processi diversi

www.devleap.it

Assembly in AppDomainAssembly in AppDomain

Processo

AppDomain AppDomain

Assembly Assembly

Shared Assembly Shared Assembly

www.devleap.it

Garbage CollectorGarbage Collector• Gli oggetti vengono distrutti Gli oggetti vengono distrutti

automaticamente quando non sono più automaticamente quando non sono più referenziatireferenziati

• A differenza di COM, non ci si basa sul A differenza di COM, non ci si basa sul Reference CountingReference Counting• Maggiore velocità di allocazioneMaggiore velocità di allocazione• Consentiti i riferimenti circolariConsentiti i riferimenti circolari• Perdita della distruzione deterministicaPerdita della distruzione deterministica

• Algoritmo Mark-and-CompactAlgoritmo Mark-and-Compact

www.devleap.it

Garbage Collector - fase 1: MarkGarbage Collector - fase 1: Mark

NextObjPtrNextObjPtr

Oggetti “vivi”Oggetti “vivi”

Oggetti non raggiungibiliOggetti non raggiungibili

Spazio liberoSpazio libero

Root setRoot set

www.devleap.it

Garbage Collector - fase 2: Garbage Collector - fase 2: CompactCompact

NextObjPtrNextObjPtr

Oggetti “vivi”Oggetti “vivi”

Spazio liberoSpazio libero

Root setRoot set

Spazio recuperatoSpazio recuperato

www.devleap.it

GC e distruzione deterministicaGC e distruzione deterministica• In alcuni casi serve un comportamento In alcuni casi serve un comportamento

di finalizzazione deterministica:di finalizzazione deterministica:• Riferimenti a oggetti non gestitiRiferimenti a oggetti non gestiti• Utilizzo di risorse che devono essere Utilizzo di risorse che devono essere

rilasciate appena termina il loro utilizzorilasciate appena termina il loro utilizzo

• Non si possono usare i finalizzatori, che Non si possono usare i finalizzatori, che non sono richiamabili direttamentenon sono richiamabili direttamente

• Implementare l’interfaccia Implementare l’interfaccia IDisposableIDisposable

www.devleap.it

Piattaforma multi-linguaggioPiattaforma multi-linguaggio• Libertà di scelta del linguaggioLibertà di scelta del linguaggio

• Tutte le funzionalità di Tutte le funzionalità di .NET .NET Framework Framework sono disponibili a tutti i linguaggi .NETsono disponibili a tutti i linguaggi .NET

• I componenti di un’applicazione possono I componenti di un’applicazione possono essere scritti con diversi linguaggiessere scritti con diversi linguaggi

• Impatto sui toolImpatto sui tool• Tool disponibili per tutti i linguaggi:Tool disponibili per tutti i linguaggi:

Debugger, Profiler, Analisi “Code coverage”, Debugger, Profiler, Analisi “Code coverage”, ecc.ecc.

www.devleap.it

CTS: Common Type SystemCTS: Common Type System• Sistema di tipi comuneSistema di tipi comune

• Alla base di tutti i linguaggi .NETAlla base di tutti i linguaggi .NET

• Progettato per linguaggi object-Progettato per linguaggi object-oriented, procedurali e funzionalioriented, procedurali e funzionali• Esaminate caratteristiche di 20 linguaggiEsaminate caratteristiche di 20 linguaggi• Tutte le funzionalità disponibili con ILTutte le funzionalità disponibili con IL• Ogni linguaggio utilizza alcune Ogni linguaggio utilizza alcune

caratteristichecaratteristiche

• Common Language Specification (CLS)Common Language Specification (CLS)• Sottoinsieme di CTSSottoinsieme di CTS• Regole di compatibilità tra linguaggiRegole di compatibilità tra linguaggi

www.devleap.it

Gestione degli erroriGestione degli errori• Uniforme per tutte le classiUniforme per tutte le classi• Gestione strutturata delle eccezioniGestione strutturata delle eccezioni

• Concetto implementato nel CTSConcetto implementato nel CTS• Disponibile in tutti i linguaggi con sintassi Disponibile in tutti i linguaggi con sintassi

diversediverse• Concetti universali:Concetti universali:

• Lanciare un’eccezioneLanciare un’eccezione• Catturare un’eccezioneCatturare un’eccezione• Codice di uscita da un blocco controllato Codice di uscita da un blocco controllato

(finally)(finally)

• Non ha costi elevati (codice/prestazioni)Non ha costi elevati (codice/prestazioni)

www.devleap.it

Gestione strutturata delle Gestione strutturata delle eccezionieccezioni

a()a()

b()b()

TryTry

c()c()

d()d()

Catch e As ExceptionCatch e As Exception

f()f()

End TryEnd Try

g()g()

Sub cSub c

r()r()

s()s()

t()t()

End SubEnd Sub

Sub sSub s

Dim a As MyClassDim a As MyClass

a = nulla = null

a.z()a.z()

a.w()a.w()

a.x()a.x()

End SubEnd Sub

www.devleap.it

Principali servizi del CLRPrincipali servizi del CLR• Garbage collector Garbage collector

• Gestione del ciclo di vita degli oggettiGestione del ciclo di vita degli oggetti• Problema della distruzione deterministicaProblema della distruzione deterministica

• ReflectionReflection• Analisi dei metadati di un assemblyAnalisi dei metadati di un assembly• Generazione di un assembly dinamicoGenerazione di un assembly dinamico

• RemotingRemoting• Chiamata di componenti remoti (.NET)Chiamata di componenti remoti (.NET)

• Interoperabilità Interoperabilità (COM, Platform Invoke)(COM, Platform Invoke)

www.devleap.it

Modello di esecuzioneModello di esecuzione

ClassClassLoaderLoader

IL to nativeIL to nativecode compilercode compiler

CPUCPUSecuritySecuritySystemSystem

CodeCodeManagersManagers

ManagedManagedNativeNativeCodeCode

AssemblyAssembly

Prima Prima chiamatachiamataal metodoal metodo

Primo Primo riferimento riferimento al tipoal tipo

ExecutionExecutionSupportSupport

www.devleap.it

Elaborazione sincrona e asincronaElaborazione sincrona e asincrona

a()a() b()b() c()c() d()d() e()e() f()f() g()g() h()h()

a()a()

b()b()

c()c()

d()d()

e()e()

f()f()

g()g() h()h()ffoorrkk

jjooiinn

TempoTempo

ElaborazioElaborazionene

sincronasincrona

ElaborazioneElaborazioneasincronaasincrona Thread 1Thread 1

Thread 2Thread 2

www.devleap.it

Elaborazione sincrona e asincronaElaborazione sincrona e asincrona• Programmazione asincrona possibile da Programmazione asincrona possibile da

tutti i linguaggitutti i linguaggi• Chiamate asincroneChiamate asincrone• ThreadThread• Thread poolThread pool• Componenti remotiComponenti remoti• A volte è “involontaria”...A volte è “involontaria”...

• Nuovo problema: componenti thread-Nuovo problema: componenti thread-safesafe

• Anche per gli sviluppatori VB!!Anche per gli sviluppatori VB!!

ApprofondimentApprofondimento:o:www.devleap.www.devleap.itit

www.devleap.it

Librerie di classiLibrerie di classi

Base Class Library

Common Language Specification

Common Language Runtime

Data and XML

VB C++ C#V

isual S

tud

io.N

ET

JScript …

WebServices

UserInterface

www.devleap.it

Unico modello di programmazioneUnico modello di programmazione

Windows API

.NET Framework

Disponibilità di API indipendentementedal linguaggio e dal modello di programmazione

ASP

Stateless,Codice incapsulato

in pagine HTML

MFC/ATL

Subclassing,Potenza,

Espressività

VB Forms

RAD,Componenti

www.devleap.it

Estendibilità delle classiEstendibilità delle classi• Il Framework non è una “scatola nera”Il Framework non è una “scatola nera”• Qualsiasi classe Qualsiasi classe .NET .NET può essere estesa può essere estesa

mediante ereditarietàmediante ereditarietà• Diversamente da Diversamente da COM, COM, si usa e si estende la si usa e si estende la

classe stessa, non uno strato intermedio classe stessa, non uno strato intermedio (wrapper)(wrapper)

• L’ereditarietà è L’ereditarietà è cross-languagecross-language

www.devleap.it

Base Class Library

Data Xml

Web Services User Interface

.NET Framework.NET Framework

www.devleap.it

System

System.Data System.Xml

System.Web

Globalization

Diagnostics

Configuration

Collections

Resources

Reflection

IO

Threading

Text

Security

SqlClient

OleDb

SQLTypes

Common

RuntimeInteropServices

Remoting

Serialization

Configuration SessionState

Caching Security

UIHtmlControls

WebControls

System.Drawing

Imaging

Drawing2D

Text

Printing

System.Windows.Forms

Design ComponentModel

.NET Framework.NET Framework

XPath

Xsl

Serialization

Schema

Hosting

Handlers

Compilation

www.devleap.it

Base FrameworkBase Framework

System

Threading

Text

Security

Resources

Reflection

IO

Globalization

Diagnostics

Configuration

Collections

Runtime

Serialization

Remoting

InteropServices

www.devleap.it

Data Data ee XML XML

System.Data

System.Xml

SqlTypes

OleDb

SqlClient

Common

Serialization

Schema

XPath

Xsl

www.devleap.it

Web Forms Web Forms ee Services Services

System.Web

Caching

Configuration

UI

SessionState

HtmlControls

WebControls

Security

Handlers

Hosting

Compilation

www.devleap.it

Windows FormsWindows Forms

System.Drawing

Drawing2D

Imaging

Printing

Text

System.Windows.Forms

Design ComponentModel

www.devleap.it

Linguaggi e ToolLinguaggi e Tool

Base Class Library

Common Language Specification

Common Language Runtime

Data and XML

VB C++ C#V

isual S

tud

io.N

ET

JScript …

WebServices

UserInterface

www.devleap.it

LinguaggiLinguaggi• La piattaforma La piattaforma .NET .NET è neutrale rispetto è neutrale rispetto

al linguaggio (nessuno è favorito)al linguaggio (nessuno è favorito)• Tutti i linguaggi Tutti i linguaggi .NET .NET hanno le stesse hanno le stesse

possibilitàpossibilità• Si possono sfruttare skill già esistentiSi possono sfruttare skill già esistenti

• Common Language SpecificationCommon Language Specification• Consumer: Consumer: Può usarePuò usare .NET Framework .NET Framework• Extender: Extender: Può estenderePuò estendere .NET Framework .NET Framework

www.devleap.it

LinguaggiLinguaggi• Microsoft fornisce:Microsoft fornisce:

• VB, C++, C#, JScriptVB, C++, C#, JScript

• Linguaggi di terze parti:Linguaggi di terze parti:• APL, COBOL, Pascal, Eiffel, Haskell, ML, APL, COBOL, Pascal, Eiffel, Haskell, ML,

Oberon, Perl, Python, Scheme, Smalltalk, …Oberon, Perl, Python, Scheme, Smalltalk, …

www.devleap.it

Visual Studio.NETVisual Studio.NET

Base Class Library

Common Language Specification

Common Language Runtime

Data and XML

VB C++ C#V

isual S

tud

io.N

ET

JScript …

WebServices

UserInterface

www.devleap.it

Visual Studio .NETVisual Studio .NET• Un solo tool per tutti i linguaggiUn solo tool per tutti i linguaggi• Creazione e consumo di servizi WebCreazione e consumo di servizi Web• Modello a oggetti del codice in editorModello a oggetti del codice in editor• Debugger integratoDebugger integrato• ……

www.devleap.it

Considerazioni finaliConsiderazioni finali• Un mondo nuovo per sviluppareUn mondo nuovo per sviluppare• Framework di classi già molto estesoFramework di classi già molto esteso

• Ma soprattutto coerente!Ma soprattutto coerente!

• Quasi tutto completamente estendibileQuasi tutto completamente estendibile• Alta integrabilità con il codice esistenteAlta integrabilità con il codice esistente• Ottima piattaforma perOttima piattaforma per

sviluppare componenti COMsviluppare componenti COM• A prima vista è tutto semplice, ma è A prima vista è tutto semplice, ma è

bene sapere cosa c’è dietro (tanto!!)bene sapere cosa c’è dietro (tanto!!)

www.devleap.it

Altre InformazioniAltre Informazioni• Dove posso ottenere maggiori Dove posso ottenere maggiori

informazioniinformazioni• www.devleap.itwww.devleap.it• www.microsoft.com/msdn/italywww.microsoft.com/msdn/italy• msdn.microsoft.commsdn.microsoft.com• www.gotdotnet.comwww.gotdotnet.com

• Developer resourcesDeveloper resources• Microsoft Visual Studio.NETMicrosoft Visual Studio.NET• Microsoft .NET Framework SDKMicrosoft .NET Framework SDK• Microsoft Developer NetworkMicrosoft Developer Network

www.devleap.it

Introduzione al .NET FrameworkIntroduzione al .NET Framework

I vostri feedback sono importantiI vostri feedback sono importanti•ScriveteciScriveteci

Grazie della partecipazione– A presto

– info@DevLeap.it