Roberto Brunetti

Developing in the cloud

.NET Programming

agosto 2007 - Posts

ARTICOLO Sviluppo Mobile: Costruire una propria libreria

Dopo vari post su SQLCE 3.0 (che diventa installabile anche su Desktop con SQL Compact Edition 3.1) è arrivato il momento di dare uno sguardo alla scrittura di una propria libreria di classi per facilitare lo sviluppo di applicazioni.

Questo articolo vuole essere una panoramica delle potenzialità spesso ignorate di Visual Studio 2005, non tanto per la produzione automatica di righe di codice (tecnica tra l’altro pericolosa in caso di grandi volumi di dati), quanto per la versatilità nella scrittura della libreria.

Sembra un articolo introdottivo, e in parte lo è, ma i concetti che vorrei passare, soprattutto dopo la prima parte, spero servano a sviluppare più velocemente testando l’applicazione sul desktop e con strumenti evoluti piuttosto che fare F5 e testare l’applicazione su device o emulatori.

Il link é il seguente http://blogs.devleap.com/articolidevleap/archive/2007/08/23/sviluppo-mobile-costruire-una-propria-libreria.aspx

Buona lettura e soprattutto spero che i trucchi per far girare le applicazioni mobile su desktop, compresi gli unit test di VSTS aumentino la produttivitá e riducano le difficoltá di test in ambiente mobile.

VSTS DB Pro Upgrade to VS 2008 Problem

In questi giorni sto migrando una solution con una ventina di progetti a VS 2008 e .NET FW 3.5.

Ho avuto un problemino sulle reference dei progetti di Unit Testing su database. Il problema é molto semplice, così come la sua soluzione: durante l'upgrade del progetto C# che tiene gli unit test rispetto al progetto DB rimane una reference con "Specific Version = True" verso Microsoft.VisualStudio.TeamSystem.Data.UnitTesting.
Ovviamente nella nuovo Visual Studio la versione è cambiata e quindi la compilazione (e anche la sola esecuzione) fallisce. Occorre quindi rifare la reference alla dll oppure impostare Specific Version a False, ricompilare e via.

GAT GAX February 2007 Unistallation Problem

Come indicato nel mio post precedente, occorre disinstallare GAT & GAX versione February 2007 prima di installare la nuova CTP di Luglio.

Sulla prima macchina dove ho effettuato il tutto é andato tutto a buon fine seguendo i passi riportati nel mio post. Su una seconda macchine invece, nonostante disinstallazione, rimozione package e nuova installazione siano andate a buon fine, avevo un problema nel lancio di qualunque package (compreso quello fornito con GAT).

Il messaggio di errore al lancio di un package o alla registrazione è: couldn't find ENVDTE.dll. Come saprete ENVDTE è la dll che GAT e GAX utilizzano per interagire con il modello a oggetti di Visual Studio.

Il problema stava nel fatto che la versione di Febbraio che avevo installato sulla macchina era stato scaricato il giorno stesso della pubblicazione e conteneva un bug: la disinstallazione faceva fuori ENVDTE e ENVDTE80 dalla directory Program Files\Visual Studio 8\Common7\IDE\Public Assemblies. Visto che questa è una DLL di Visual Studio che non viene installata con GAT, la nuova versione non era in grado di funzionare.

Sulla prima macchina tutto funzionava perchè avevo scaricato il setup di GAT Feb 2007 qualche giorno dopo e il bug era stato fissato.

La soluzione al problema è fare un Repair di Visual Studio dal CD originale in modo da ripristinare le due DLL mancanti.

Posted: ago 22 2007, 04.56 by rob | with no comments
Filed under:
Visual Studio 2008 for Mobile Dev (e non solo)

Riprendo un mio post di maggio sulle prime  impressioni sulla Beta1 di Orcas (VS 2008) rivedendolo in chiave Beta 2 e aggiungendo altri screenshot.

La prima parte riguarda lo sviluppo per device, mentre l'ultima parte è valida anche per chi non scrive applicazioni mobile.

Ho installato il tutto, parte client e parte serve della Team Suite, su una macchina VMWare dedicando 2.5 GB alla Virtual Machine visto che deve tenere su anche Team Foundation Server, SQL 2005 e SharePoint V3.

Come già segnalato nella Beta1, manca il Windows Mobile 6.0 SDK come segnalato nei post precedenti: a MEDC hanno confermato che non ci sarà neanche nella versione finale e va installato a parte.

Il .NET CF 3.5 adesso installa le stringhe di risorse sul device/emulatore tramite un nuovo cab denominato NETCFv35.Messages.EN.CAB che si trova sotto x:\program files\Microsoft.NET\SDK\CompactFramework\v3.5\windowsce\Diagnostics.

La creazione di un nuovo progetto presenta una nuova maschera, simile a quanto avveniva in VS 2003: non si sceglie il progetto dall'alberino delle varie solution disponibili, ma è sufficiente scegliere Smart Device: una volta scelto il tipo di progetto in una seconda maschera si sceglie la tipologia di piattaforma e poi la versione del .NET CF da utilizzare per le reference e per la distribuzione del runtime sul device. Si può optare per .NET CF 2.0 o per .NET CF 3.5.

N.B. le immagini incluse sono ridotte come dimensione: accanto ad ognuna il link verso la dimensione reale.

Questa la prima maschera:

Come si nota le piattaforme per cui è installato nativamente l'SDK sono Pocket PC 2003, Windows CE, Windows Mobile 5.0 for Pocket PC e SmartPhone.

Una volta scelta la piattaforma si sceglie la versione del .NET CF da utilizzare:

 

 Dopo la scelta della versione del .NET CF, come sempre scegliere Device Application, Class Library e così via per creare il tipo di progetto.

Il designer delle Windows Form (visto che WPF non è disponibile sul .NET CF 3.5) si presenta molto simile al precedente: si può scegliere il form factor da assegnare ad ogni form e ruotare lo schermo del designer come nella versione 2005 di VS.

Anche la toolbox si presenta più o meno identica. Questo l'elenco dei controlli:

 

 

La configurazione dell'emulatore da Visual Studio prevede quanto conosciamo con l'attuale Device Emulator 2.0 e consente la gestione del livello della batteria: questa funzione risulta molto comoda per testare un'applicativo power-aware (come dovrebbero essere tutti): è inutile lanciare una operazione lunga di analisi sui dati, ad esempio, se resta il 2% di batteria.

 

 

Molto interessante il nuovo Device Configuration Manager, primo fra gli strumenti per facilitare la configurazione di device e emulatori: ad oggi è necessario comporre i file .xml di provisioning e "installarli" tramite rapiconfig.exe. Con questo nuovo strumento risulta molto semplice leggere la configurazione, modificarla e vedere le differenze fra la configurazione desiderata e quella attuale. Si possono importare anche i nostri file di provisioning esistenti per una facile migrazione al nuovo strumento.

 

 

Risulta molto semplice così testare l'applicazione firmata o non firmata sulle varie configurazioni dei device One-Tier, Two-Tier, Locked, Prompt e così via.

Tramite questo strumento è possibile visualizzare i certificati digitali installati su device e emulatori, installarne di nuovi e verificarne i dettagli. Una nota, i nomi dei certificate store sono cambiati: non abbiamo più il privileged e unprivileged, ma Privileged Store e Standard Store, dove il secondo rappresenta lo store per i certificati con cui le applicazioni possono girare in normal-mode su device two-tier.

 

 

Il .NET CF Remote Performance Monitor consente, nella nuova versione di fare un "attach to process" rendendo più semplice l'analisi di una porzioni di applicazione: la versione attuale deve lanciare l'applicazione e quindi ci costringe a visualizzare i dati complessivi di tutta l'applicazione fino a raggiungere il punto in cui si desidera effettuare le verifiche. La parte device-side viene installata in automatico dallo strumento senza bisogno di copiare manualmente i file nella directory \Windows: qualche problemino sulla mia Beta non consente di eseguire questa operazione in automatico e quindi ho dovuto comunque copiare i file a mano. I nuovi file device-side hanno nomi diversi dai precedenti e più precisamente sono: rtf3_5.dll e rtfhost3_5.exe. Tali file si trovano sempre nella directory dell'SDK del .NET CF 3.5 x:\program files\Microsoft.NET\SDK\CompactFramework\v3.5: ricordatevi di scegliere poi la directory corretta in base al processore del device; per gli emulatori si utilizza sempre la versione ARM.

Nella prossima immagine la directory con gli strumenti lato PC di sviluppo. Oltre al .NET CF RPM, troviamo LogViewer, già presente nella versione 2.0 SP1/SP2 e due nuovi strumenti:

 

 

Il primo NETCFCLRProfiler è una versione ridotta (e per la verità anche diversa) del Profiler del Framework completo. Consente di analizzare nel dettaglio un'applicazione in esecuzione: anche in questo caso ci si può "attaccare" ad un processo già avviato e l'installazione delle dll lato device è automatica (come sempre sono sfigato e ho dovuto copiare a mano clrpro3_5.dll sul device). Lo strumento visualizza anche sotto forma di flusso grafico le chiamate fra i vari metodi consentendo una semplice (si fa per dire quando si parla di profiling in generale) individuazione dei punti della call stack che possono dare problemi.

Il compact frameowrk 3.5 arriva con qualche dll in più per supportare LINQ e WCF (sempre in versione ridotta: entrambi sono c.a. 250KB come obiettivo nella versione finale) e i nomi dei cab sono stati leggermente rivisti.

 

 Nella System.ServiceModel si trovano le "porzioni" del motore di WCF e il binding basicHttpBinding, mentre in Microroft.ServiceModel.Channels.Mail.* il nuovo canale (non disponibile in WCF su desktop) WindowsMobileMailBinding che consente lo scambio di messaggi SOA sfruttando il canale della posta elettronica fra device (Pocket Outlook) e  Exchange 2007; ricordo che Exchange 2007 supporta il push dei messaggi verso il device.

Come sempre le sottodirectory wce400 e wce500 contengono i cab per l'installazione reale su device o emulatore in base alla versione del sistema operativo. Ricordo che Windows Mobile 6.0 si basa sempre su Windows CE 5, per precisione sulla 5.2.

System.Data.Entities contiene invece le parti applicative dell'entitiy framework, mentre il provider è contenuto sotto System.Data.SqlServerCe.Entitiy.dll che arriva con l'installazione di Sql Server Compact Edition 3.5.

SQL CE 3.5 arriva con qualche piccola novità per i device e con grandi novità su utilizzato su desktop, Tablet o UMPC.

La directory di installazione sul pc di sviluppo è x:\program files\Microsoft SQL server Compact Edition\v3.5 e si presenta così:

 

Come accennato, entity framework viene reso disponibile tramite System.Data.SqlServerCe.Entity, ma solo se utilizzato su PC, Tablet o UMPC: non è quindi disponibile per Windows Mobile.

L'installazione prevede diversi componenti:

1) SSCEVSTools-ENU.msi: installa i componenti design-time in Orcas sotto la classica directory x:\program files\microsoft visual studio 9\Common7\IDE. Questi componenti non devono essere distribuiti

2) SSCERuntime-ENU.msi: installa i componenti di runtime per desktop, tablet e UMPC. Sono indispensabili sia a runtime che a design time. Questo MSI installa anche i nuovi componenti per la versione desktop di SQCE 3.5: Microsoft Synchronization Services for ADO.NET (OCS) e la già citata System.Data.SqlServerCe.Entity.dll.

3) SSCEDeviceRuntime.msi: installa i componenti destinati ai device e emulatori sulla macchina. Questi componenti sono necessari per l'integrazione con VS Orcas anche sulla macchina di sviluppo.

Le novità che abbiamo bollato come minori (rispetto appunto a EntityFramework e OCS) riguardano soprattutto il query processor :

- data type di tipo timestamp

- nested query

- CROSS apply e OUTER APPLY

- CAST

- TOP (finalmente !!!!!) diventa così più semplice paginare i dati per la loro visualizzazione nei minuscoli schermi

Oltre a OCS e Entity Framework, SQL CE 3.5, se utilizzato sul desktop, fornisce la possibilità di rientrare in una transazione creata con la System.Transaction 2.0: in due parole una operazione su SQL CE 3.5 può essere inserita all'interno del TransactionScope.

I Book On Line non sono ancora disponibili.

Abbiamo accennato nei post precedenti come in Visual Studio Orcas sia possibile effettura Unit Testing su device (o emulatore): credo che questa funzionalità, affiancata dal nuovo .NET CF RPM e dal profiler, siano le novità più importanti e utili della nuova versione.

Tra l'latro in Orcas gli strumenti di Unit Testing non sono più all'interno di Team System, ma disponibili nella versione Professional, almeno a quanto ci è dato sapere oggi.

Ecco le maschere di crezione di uno unit test, praticamente identiche (tranne un settaggio) a quanto oggi disponibile in VSTS:

 

 

 

Nella seconda immagine, come si può notare, la configurazione degli host prevede il tipo Smart Device con relativa piattaforma e scelta fra device e emulatore.

Se si crea una performance session su uno Unit Test il codice viene fatto girare sul desktop.

Anche senza l'automatismo in VS Orcas, oggi è possibile eseguire unit test su codice mobile, creando un progetto desktop con i sorgenti mobile linkati al suo interno e oppure compilazioni condizionali nel caso in cui il codice faccia uso di dispositivi, tipo lettore di codice a barre ad esempio, non disponibili sul desktop. Fra qualche giorno posso postare un mio articolo, scritto per Infomedia, proprio su questo argomento. La demo allegata all'articolo è già disponibile sul mio sito Think Mobile all'indirizzo http://thinkmobile.it/files/folders/mmdcii/entry5896.aspx.

Il nuovo Device Emulator 3.0 si presenta così:

 

 

A parte la user interface pressochè identica, è possibile salvare la configurazione degli emulatori con Save As e riconfigurare l'emulatore. Il file di configurazione (.defcfg) è anche molto semplice da modificare a mano per cambiare al volo qualcosa senza ricorre alla user interface e soprattutto per poter scambiare la configurazione degli emulatori fra i membri di un team di sviluppo senza doverla ricreare su ogni PC di sviluppo.

 

 

VSTS non solo Mobile

Alcuni screen shot che riguardano lo sviluppo con VSTS 2008 in generale.

Per prima cosa la parte server (Team Foundation Server) si presenta così

Si basa su SharePoint v3 (di cui avremo modo di parlare alla SharePoint Conference). Il default web site espone le due classiche directory di reporting server, mentre il sito Team Foundation Server espone i servizi per Build, Services, Version Control, OLAP e Work Item Tracking.

Le varie applicazioni sono divise in 3 Application Pool che ospitano appunto i servizi TFS, la parte di reportistica e l'amministrazione di SharePoint.

Dal menù di un progetto è possibile generare le "metriche del codice"  (Code Metrics suona molto meglio) di cui abbiamo già accennato qualcosa nell'altro mio post sulla CTP di Marzo.

Per capire meglio questa nuova funzionalità prendiamo ad esempio il seguente codice

Una volta generato il Code Metrics si ottiene questo risultato.

"Code Metrics" consente di capire se il codice di un progetto/solution è complesso da manutenere, il livello di coupling, la profondità gerarchica delle classi e l'ormai famoso indice di Cyclomatic Complexity (già presente nel Code Analysis della versione attuale in forma testuale).

Altra opzione "carina" è la gestione delle using di un sorgente C#. Dal menù contestuale si possono infatti organizzare le using:

Ultimo screenshot: la versione VSTS for DB Pro 2008 presenta nativamente l'analisi del codice T-SQL tramite FXCop (che in realtà già dalla versione 2005 si chiama Code Analysis): queste le regole disponibili, immagino già note a molti:

 

Alla prossima.

GAT GAX July CTP

In Italia si va in ferie e in USA si produce :-)

Scherzi a parte oltre al già citato download per VSTS for DB Pro ecco una nuova CTP del Guidance Automation Toolkit (e relativo Guidance Automation Extension). Sono appena rientrato da una settimana di ferie: lo installo e vi faccio sapere (soprattutto per i partecipanti alla nostra DevCon 2007 che hanno seguito una sessione sull'argomento) se ci sono differenze con la versione di Febbraio.

Il prodotto è uscito il 3 di Agosto...a 3 giorni da quando con Paolo e Cristian abbiamo creato il package per generare il codice secondo il modello che usiamo in Pialorsi Sistemi...tempismo perfetto :-)

Il download http://www.microsoft.com/downloads/details.aspx?FamilyID=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&displaylang=en

UPDATED: Installazione e novità

Nella documentazione trovate ancora i riferimenti alla versione di Febbraio 2007 anche se le info si riferiscono alla nuova versione. L'installer è stato rivisto per usare WiX e la registrazione si può effettuare come RANU (Registration as Normal User).

Non è una vera e propria nuova versione (è un minor update) che funziona con VS 2005 e VS 2008 Beta 1 e Beta 2. Non ci sono quindi grosse novità e si può continuare a lavorare con la CTP di Febbraio a meno di non voler testare i package con VS 2008. No ci sono fix critiche (in effetti anche la versione di Febbraio funzionava piuttosto bene nonostante l'appellativo di CTP).

E' ancora una CTP, non perchè non sia un prodotto finale, ma semplicemente perchè non è supportato: la versione reale è infatti 1.3 ed è considerata finale, non Beta.

Per eseguire l'updrade occorre:
1) Deregistrare tutti i package esistenti (compreso il GAT). Disinstallare anche Enterprise Library, Web Client Software Factory e Smart Client Software Factory (se li usate) in quanto fanno uso di Package GAX versione precedente
2) Disinstallare GAX e GAT February 2007
3) Installare GAT e GAX July 2007
4) Reinstallare i package
5) Reinstallare Enterprise Library, Web Client Software Factory e Smart Client Software Factory

La buona notizia è che i package esistenti (una volta riregistrati) funzionano: ho provato anche a registrarli in Orcas Beta2 e funzionano ! Unico problema: le reference dei progetti GAT esistenti puntano alla "Specific Version 1.2.0.0"; occorre quindi togliere e rimettere le reference alle Dll del Recipe Framework oppure impostare Specific Version su False.

 

La brutta notizia è come fare a disinstallare i package esistenti. Ci sono due modalità

1) Aprire da Visual Studio la solution e fare Unregister da tasto destro sul progetto. Operazione da fare per ogni package

2) Visto che spesso si sono fatte delle prove e delle correzioni è probabile che l'opzione 1 non si si possa eseguire. Per togliere a mano i package (in inglese)

 

Prima di cancellare i package dal file XML segnarsi i GUID: servono nel passo successivo !!!

 

Remove the guidance package entry from the recipe framework manifest

  • Go to C:\Documents and Settings\All Users\Application Data\Microsoft\Recipe Framework\RecipeFramework.xml
  • Delete the guidance package entry from the manifest using the PackageName

Remove registry entries

  • Open windows registry editor
  • Delete the following keys:
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\AutoLoadPackages\<PackageGUID>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Menus\<PackageName>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NewProjectTemplates\PseudoFolders\<PackageGUID>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\NewProjectTemplates\TemplateDirs\<PackageGUID>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Languages\CodeExpansions\<LANGUAGE>\Paths\<PackageName>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\<PackageGUID>
    • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\<PackageGUID>

In bocca al lupo :-)

Posted: ago 20 2007, 04.42 by rob | with 2 comment(s) |
Filed under: , ,
VSTS for DB Pro Power Tools

Dopo il rilascio della Service Release 1  ecco un nuovo pacchetto per Team System for Database Professionals. Include una serie interessante di strumenti di refactoring per Stored Procedure e Schema e una anticipazione di quello che avremo con VS 2008 per quanto riguarda l'analisi del codice TSQL

Molto interessante il Dependency Tree Viewer per visualizzare le dipendenze fra oggetti DB.

Ecco le specifiche

TSQL Static Code Analysis
• Static Code Analysis - A precursor to the functionality that will be in future versions of VSTS that will allow you to perform Static Code Analysis on T-SQL code.

Refactoring
• “Move Schema” Refactoring - Allows a user to right click on an object and move it to a different but existing schema
• SP Rename Generation - Generate a new script that will contain sp_renames for all rename refactored objects that the user can then execute.
• Wildcard Expansion - Automatically expand the wildcard in a select to the appropriate columns.
• Fully-Qualified Name Support - Automatically inject fully-qualified names when absent in a script
• Refactoring extended to Dataset - Refactor into strongly typed dataset definitions

MSBuild Tasks
• Data / Schema Compare Build Tasks - MSBuild tasks that can generate scripts as if the user had run the Data / Schema compare UI

Schema View
• API Access to Schema View - Insert / Update / Delete to schema View and list schema objects and their associated files

Dependency Tool Window
• Dependency Tree - Show the dependencies ( incoming / outgoing ) for selected schema objects in a new tool window

Miscellaneous Tools
• Script Preprocessor - Expand SQLCMD variables and include files and command line version (sqlspp.exe) & an MSBuild version ( wraps the command line version )

Il download http://www.microsoft.com/downloads/details.aspx?FamilyID=DA3F11AD-BD54-4EDA-B08C-4DF84DF0D641&displaylang=en.

Posted: ago 20 2007, 04.30 by rob | with 2 comment(s)
Filed under:
Team Foundation Server Web Access (aka Team Plain)

Da qualche giorno é disponibile al download Web Access Powert Tool per VSTS.

Fornisce l'accesso a TFS per gestire Work Item, Report, Build, Source Control via browser.

http://www.microsoft.com/downloads/details.aspx?FamilyID=2105C9EE-565E-47B9-A5AC-9A8FF8A07862&displaylang=en

Posted: ago 04 2007, 12.26 by rob | with no comments
Filed under: