Uppgradera till Visual Basic.NET Per Ahlberg Johan Lindfors
Hur kan vi bli bättre... Era utvärderingar är viktiga! Betygsätt innehåll, talare, relevans Kommentera gärna Kommentarer förra kvarttalet Mer Visual Basic Jättebra att kunna ställa frågor innan seminariet Vegetariska alternativ borde finnas
Vad har vi pratat om tidigare? En hel del saker... Windows Server 2003 Säkerhet i.NET Framework XML Web Services J2EE och.NET Java vs C# Smarta klienter .NET Compact Framework Office 2003
Vad kommer vi prata om... Idag VB 6.0 till VB.NET Nästa gång – februari/mars Säkerhet, säkerhet, säkerhet Och gången därpå – innan sommaren Det vet jag inte än... Jag jobbar på Longhorn, Whidbey, Yukon Eller C++???
Lokala resurser för utvecklare MSDN Flash Regelbundet nyhetsbrev MSDN Live Regelbundna seminarier MSDN Chatt Ge feedback, ställ frågor MSDN Webb
MSDN TV Presentationer och demonstrationer Runt 30 minuter långa 1-2 demonstrationer Se på nätet eller ladda ner! 17 sessioner just nu C# Visual Basic.NET Säkerhet DirectX
MSDN Prenumerationer Prioriterad tillgång till mjukvara Automatisk månadsvis uppdatering Library Operating Systems Professional Enterprise Universal
Globala resurser för utvecklare ”Developer Centers” Säkerhet Longhorn Utbildning MSDN TV ”WebCasts” Artiklar Kod
PAG Prescriptive Architecture Guidance Relevanta tips Konkreta förslag Omfattande lösningar Tekniskt bevisade Fritt att ladda hem!
Empowerment – speciellt för ISV Vad får jag? Upp till fem licenser av Windows XP/2000 Professional Office XP/2000 Premium eller Developer En serverlicens och fem CAL Windows 2000/2003 Standard eller Enterprise Exchange 2003 Standard eller Enterprise SQL Server Standard eller Enterprise SharePoint Portal Server Fem stycken MSDN Universal-prenumerationer
Jag åtar mig att utveckla en produkt för Windows Server 2003, XP eller 2000 SQL Server 2000 Pocket PC eller Smartphone Vad kostar det? 375 USD Kontakta: Empowerment – speciellt för ISV
Vilka är vi som är här idag?
Agenda Visual Studio.NET Utvecklingsmiljön Uppgradera till Visual Basic.NET Att uppgradera Verktyg Windowsformulär och komponenter ADO/XML Webblösningar Win32 API Utrullning och installation
Nyheter i utvecklingsmiljön Alla projekt och lösningar i samma miljö Webbutveckling/Webbservices Windows applikationer Mobila lösningar Windows services Office 2003 Gemensamma verktyg för alla språk/lösningar
Nyheter i utvecklingsmiljön ”Rapid Application Development” (RAD) Icke grafiska kontroller placeras separerat från UI Arv med grafiska gränssnitt syns direkt Ny meny editering Handtag, dockning, låsa egenskaper Ändra storlek på många kontroller Plus mycket, mycket mer… 01
Kontrollskott! Var ändrade Per typsnitt för texteditorn? Vad står PAG för? Vad är adressen till svenska msdn-webben?
Tips och Tricks! Ta bort Microsoft.VisualBasic namnrymden! Project | Common Properties | Imports Koden som genereras av verktyget är bra kod! Använd som exempelkod Hjälptexten är gigantisk! Lär dig att hitta och kopiera från exempel! Lär dig hitta på nätet! msdn.microsoft.com
Agenda Visual Studio.NET Utvecklingsmiljön Uppgradera till Visual Basic.NET Att uppgradera Verktyg Windowsformulär och komponenter ADO/XML Webblösningar Win32 API Utrullning och installation
Visual Basic.NET Inte bara Visual Basic Byggt för.NET Framework Common Language Runtime (mscoree.dll) Alla basklassbibliotek (mscorlib.dll + andra) Moderniserad och uppstädad syntax Helt och hållet objektorienterat språk
CLR: Nyckelfunktioner Stöd för flera programspråk Delade typer (Common Type System) Ersätter delar av COM:s exekveringslager Automatisk städning av objekt ”Garbage Collection” Stöd för multitrådning Inbyggd säkerhet, ned på kod nivå Kodbaserad, bevisbaserad
Visual Basic.NET Förbättrat arv av interface Överskrivning (override) och överlagring (overload) Konstruktorer med parametrar Strukturerad felhantering - SEH (Try…Catch…Finally…End Try) Genvägar Dim cnSql As New SqlConnection(strConn) Private i,x,y As Int32 i+=1, strName &=“Bob” For Each s As String In X Dim cnSql As New SqlConnection(strConn) Private i,x,y As Int32 i+=1, strName &=“Bob” For Each s As String In X 02
MessageBox.Show(“Hello World”) ByRef eller ByVal krävs Eventhanterare Använder nyckelordet ”Handles” Gemensam signatur Arrays börjar nu alltid på 0 Varianter finns ej längre, ”object” istället Property…End Property Handles Button1.Click, Button2.Click Visual Basic.NET – Viktiga nyheter (sender As Object, e As xxxEventArgs) 03
Visual Basic.NET - Upprensning Borttaget Def... Imp, Eqv Funkar faktiskt men… GoTo [Line no.] Ta bort GoSub…Return LSet, VarPtr, ObjPtr, StrPtr
Visual Basic.NET - Datatyper Heltal: Flyttal Currency ersatt av Decimal Heltal Visual Basic 6.0Visual Basic.NET 8-bitByte 16-bitIntegerShort eller Int16 32-bitLongInteger eller Int32 64-bitLong eller Int64
Visual Basic.NET – Till sist... Det är fortfarande Visual Basic Körs endast med.NET Framework RAD för både Windows och Webb < 100% bakåt kompabilitet VBA Inte ett.NET språk Kommer leva kvar! 04
Uppgradering Alternativ Delvis uppgradering (använd COM interop) Utvärdera fördelar Ger det mer värde? Ökad prestanda? Ökad skalbarhet? Utvärdera kostnader Kan jag använda uppgraderingshjälpen? Storlek och komplexitet? Befintlig kvalitet på kod? Drar fördel av.NET Framework? Nytt språk och ny arkitektur? Applikationens livslängd?
TeknikRekommendation Visual Basic 6.0 grafiska modell Låt vara eller skriv om med GDI+ DAO och RDO data bindningUppgradera till ADO or ADO.NET Dynamic Data Exchange (DDE)Låt vara eller använd alternativa kommunikations sätt OLE Container ControlLåt vara Visual Basic 5.0 kontrollerUppgradera till Visual Basic 6.0 eller Visual Basic.NET DHTML ApplikationerLåt vara; kan fungera i.NET Microsoft ® ActiveX ® ________Låt vara eller använd COM interop Property pagesLåt vara UserControlsLåt vara; kan fungera i.NET WebClassesLåt vara; kan fungera i.NET Uppgradering - Tekniker
Uppgradering - förberedelser Bryt upp applikationer i mindre projekt Slå fast förhållandet mellan applikationerna Kör ”Upgrade Wizard” Beräkna tidsåtgången för varje del Förbereda, uppgradera, fixa Designa om och testa
Kör sida vid sida VB6 & Visual Studio på samma maskin Installera i vilken ordning som helst Använd ”Upgrade Wizard” ActiveX kontroller ändras ej Kör Visual Basic 6.0 under uppgradering Ändrar ej originalet Uppgradering
Verktyg - ”Upgrade Wizard” Fel som inte hanteras Dim x As New y Vissa typ-konverteringar Egenskaper skickade med ByRef Dim x() ReDim x(5,5) Vissa funktioner på ActiveX kontroller 05
Verktyg - ”Code Snippet” Vad är det? Ett inbyggt verktyg i Visual Studio.NET Alternativ till projekt konvertering Gjort för kod snuttar Fungerar bra med ASP till ASP.NET också! 06
Verktyg – ”Code Advisor for VB6” Vad är det? Add-in till Visual Basic 6 Ger förslag direkt i VB6 koden Vad som inte kommer att fungera Vad som bör göras ”Best practices” 07
Användargränssnittet Windows Forms på det nya sättet Windows Forms med.NET klasser Bättre grafik med GDI+ Genomgånde förändringar: Gemensam utvecklingsmiljö Kontroller och händelser Globalisering / lokalisering Dim frm As New Form1 frm.Show() ‘eller frm.ShowDialog() Dim frm As New Form1 frm.Show() ‘eller frm.ShowDialog() 08
Användargränssnittet Vissa nya eller mycket förbättrade kontroller LinkLabel, NotifyIcon MainMenu, ContextMenu Hjälpkontroller ToolTip ErrorProvider HelpProvider ToolBar Splitter
Användargränssnittet Borttagna eller ersatta kontroller Spinner Line and Shape DirListBox, FileListBox, DriveListBox CommonDialog Image Frame 09
Användargränssnittet Ändringar för mushändelser Nya mushändelser: MouseEnter, MouseHover, MouseLeave MouseWheel MouseEventArgs objektet: Button X, Y Clicks Delta Grafiska kontroller ger också åtkomst till mushändelser
Användargränssnittet Arbeta med Drag-and-Drop Mellan kontroller - samma som mellan applikationer Ungefär samma koncept som i Visual Basic 6.0 Inget support för automatisk drag-and-drop AllowDrop = True Alla händelser utom DragLeave får DragEventArgs: AllowedEffect Data Effect KeyState och X,Y 10
Komponenter Ofta relativt enkla att uppgradera Rena klasser utan användargränssnitt Redan delvis objektorienterade Fundera på ny arkitektur WebServices alternativt.NET Remoting Använda Dataset, XML Fungerar även mot VB6 COM interop 11
Kontrollskott! Try... Catch... ???... End Try Går det att skapa en event-hanterare i runtime? Nämn tre verktyg för uppgradering av kod!
Tips och Tricks! Förbered VB 6 kod för uppgradering: Använd inte: Default-egenskaper ”Late Binding” Varianter Använd ”Code Advisor”! Använder du ActiveX kontroller? Kontrollera med leverantör om.NET versioner finns tillgänliga!
Agenda Visual Studio.NET Utvecklingsmiljön Uppgradera till Visual Basic.NET Att uppgradera Verktyg Windowsformulär och komponenter ADO/XML Webblösningar Win32 API Utrullning och installation
ADO till ADO.NET Vad är ADO? ActiveX Data Objects COM baserat Många olika data källor Både kopplad och frånkopplat Begränsat stöd för XML Fungerar fortfarande i Visual Basic.NET! Färdiga ”COM” wrappers för ADO
ADO.NET DataAdapter Command DataReader Connection DataSet Windows formulär Webb formulär Övriga Data Providers ADO.NETKonsumenter
ADO.NET Scenarios Kopplat Connection, command, data reader Mellan lager Data adapter Urkopplat DataSet, DataTable, DataView, and others
ADO till ADO.NET Connection objektet Väldigt likt ADO Connection objekt Command Väldigt likt ADO Command objekt Data reader Framåt, endast-läsing recordset Data adapter Ingen motsvarighet i ADO DataSet Representation i minnet av en databas 12
MSXML till.NET XML Microsoft XML Core Services MSXML 4.0 Service Pack 2 COM Objekt I princip samma DOM objekt modell Fast lite annorlunda klassnamn System.XML namnrymden MSXML ServerXMLHTTP/XMLHTTP http post/get för ”hand” Använd HttpWebRequest, HttpWebResponse Använd Webservice i stället 13
Utmaningar med klassisk ASP Läsbarhet av kod, mycket kod! Komplex “PostBack”-hantering Återanvändning Prestanda Låsning av DLL’er Utrullning Sessioner Cachning
Nyheter i ASP.NET Ny arkitektur .NET Framework Web Forms, serverkontroller, Web Services Tillförlitlighet Konfigurering Tillståndshantering Säkerhet Cachning
ASP.NET HTTP Runtime ASPX motor Instans ”Page” ASP.NET sida Begäran 1 3 Svar 6 7 Moduler Klass ”Page” Sidhanterare ”Page Handlers” 8 2 Arkitekturen i ASP.NET
WebForms Filändelsen är.ASPX Nytt ”Page” direktiv WebForm är en objektmodell Händelsestyrt Exekveras både på klient och server
”Server Controls” HTML kontroller Mappar väl mot vanliga HTML-element Webb kontroller Rikare funktionalitet Objektmodell Valideringskontroller Mobila kontroller
”Web User Controls” Egenskapade webbobjekt Fungerar som en del av en webbsida Ersätter ”server-side include” ”Partial Caching” Dela kontrollen med flera sidor Skapas som en ”WebForm”
Uppgradera ASP till ASP.NET Konvertera gränssnittet först Använd ”Code-behind” klasser Flytta eventuell logik till klasser Här finns mest att tjäna Har ofta VB6 komponenter Konvertera dessa separat Vissa utgår pga. bättre objektmodell i ASP.NET Vissa kommer att läggas direkt i ASP.NET projektet 14
COM. NET COM.NET “COM Interop” .NET till COM COM till.NET
Använd COM komponenter i.NET Skapa en assembly som innehåller typ definitioner enligt COM för komponenterna Lägg till en referens i Visual Studio.NET Eller använd TLBIMP Definiera typerna manuellt! Använd som hanterade komponenter Skapa en instans med “new” Fånga fel Arv och utveckling
Använd.NET komponenter i COM Skapa “COM type library” Med hjälp av TLBEXP Eller med hjälp av Visual Studio.NET Installera och registrera assemblyn RegAsm GACUtil Sätt en referens till TLB om det behövs 15
Vad är Win32 API? DLL är en del av Windows OS Inget inbyggt typbibliotek Inte COM objekt Fördelar Sparar tid hos utvecklare Gör saker som inte går med Visual Basic 6 Nackdelar Svåra att använda Kan vara komplexa att förstå Win32 API uppgradering
Stöd för Win32 API i.NET Dom flesta anrop fungerar fortfarande Många migreras utan problem Försök att undvika dem ändå! .NET Framework klasser inkapslar Win32 API funktioner Exempel System.Diagnostics System.Drawing System.Environment …
Tänk på Wizarden konverterar numeriska datatyper Strängar med fast längd stöds ej UDT’s med med fast längd på strängar eller byte arrayer Lägg till ”MarshallAs” attributet Deklarationer med ”As Any” stöds ej Callbacks funktioner måste fixas efter uppgradering Använd ”delegates” med ”AddressOf” Win32 API uppgradering 16
Installation – icke.NET Tänk på Effekter på systemet Kommer installation av applikation 1 bryta applikation 2? ”Första-gångs-installation” Applikationen måste installeras på varje klient Uppdatering av en applikation Måste installeras om på varje klient
Nya alternativ ”No-touch” installation Isolerade applikationer är standard Ingen registrering behövs Stark versionshantering för delade komponenter Installation är enkelt XCOPY till klienten Kör från en delad katalog Klicka på en länk i en browser Installation
URL-refererad program Ingen installation, automatisk updatering Klicka på en länk i en browser Lagras i ”download cache” Hämtas endast när uppdateringar finns Refererade ”assemblies” hämtas automatiskt Installation – ”No Touch”
Liten lokal assembly – ”laddare” Ladda assemblies från en Webbserver Applikation hämtas automatiskt Uppdatera endast ”assemblies” på servern Använd Assembly.LoadFrom(url) Tar en URL som parameter Laddar automatiskt ned ”assemblies” Kontrollerar automatiskt efter nya versioner Installation – ”No Touch”
Lagras i ”download cache” Inte i ”global assembly cache” (GAC) Ovanpå WinInet (IE) cache Per användare .NET Framework krävs på klienten Använd ”Updater Application Block” För att automatiskt uppdatera en applikation Färdiga klasser med funktionalitet Stödjer våra riktlinjer - PAG 17
Kontrollskott! Vad heter klassen som representerar en databas i primärminnet? Filändelsen för ett webb forumlär i ASP.NET? Var lagras ”assemblies” som installeras över webben?
Tips och Tricks! Har du bråttom: Låt ADO vara kvar... COM Interop fungerar bra! Skriv.NET ”wrappers” för att spara tid! Då behöver du inte skriva om dina klientapplikationer senare! Förbered dina applikationer för en distribuerad miljö! Skikta dem med XML eller WebServices!
Länkar till mer information MSDN TV på svenska Visual Basics hemsida msdn.microsoft.com/vbasic GotDotNet