Slide della sessione “Tecniche Agili su TFS 2012” al Microsoft Dev Camp

Mi sono accorto di non aver mai pubblicato il materiale della presentazione che ho tenuto al Microsoft Dev Camp a novembre 2012.

La sessione riguardava i metodi Agili, SCRUM e il supporto che Team Foundation Server può dare a tali metodi.

Purtroppo non sono state fatte registrazioni video quindi posso solo pubblicare le slide.

Share

Gli shortcut di Resharper

Per chi non lo conoscesse Resharper è un’estensione per Visual Studio per aumentare la produttività nella scritture del codice, effettuare refactoring, avere una naming convention uniforme, muoversi agilmente all’interno della soluzione ed eseguire i test unitari direttamente nell’IDE (solo per citare alcune delle feature).

Resharper

Un amico mi ha chiesto quali sono secondo me gli shortcut principali da utilizzare con Resharper.

I principali che uso sono:

  • ctrl+t per cercare un tipo
  • ctrl+shift+t per cercare un file
  • shift+alt+l quando ho un file aperto per trovarlo all’interno della solution
  • alt+enter un po’ ovunque sull’editor per accettare i suggerimenti/refactoring di default
  • ctrl+tasto sx del mouse su un tipo per andare alla sua definizione
  • ctrl+shift+r per attivare il menù di refactoring
  • ctrl+e+u per “circondare” un pezzo di codice con parentesi o try-catch

L’elenco di tutti i gli shortcut si trova qui:

http://www.jetbrains.com/resharper/webhelp/Reference__Keyboard_Shortcuts.html

Share

Unit testing e coverage con Visual Studio 2012

Dopo aver provato i principali framework di unit testing su .Net (MSTest, MbUnit, NUnit e xUnit) ho scelto NUnit come framework di riferimento.

Il problema degli ambienti di terze parti è che fino a Visual Studio 2010 non era possibile eseguire i test direttamente dall’IDE e la soluzione era quella di utilizzare plugin quali Resharper o TestDriven.Net

Finalmente in Visual Studio 2012 è stato aggiunto il supporto per i framework di test di terze parti!

L’utilizzo è reso semplicissimo in quanto è sufficiente installare l’adapter tramite l’Extension Manager.

Ad esempio per NUnit è disponibile ”Unit Test Adapter“:nunit-test-adapter-vs2012

Gli adapter disponibili attualmente sono:

  • NUnit
  • xUnit.net
  • MbUnit
  • QUnit
  • Jasmine

A questo punto è possibile utilizzare il test runner integrato in Visual Studio:

vs2012-test-explorer-with-nunit

L’integrazione tra Visual Studio 2012 e i framework di test di terze parti ha anche il vantaggio collaterale che diventa disponibile il code coverage!

Basta selezionare “Analyze Code Coverage” per il test selezionato o per tutti i test per avere le statistiche di coverage e per avere un riscontro visivo del coverage direttamente sul codice sorgente.

code-coverage-vs2012-nunit

Share

Nuove “piccole” feature di Visual Studio 2012

Tra le tante novità che sono state introdotte in Visual Studio 2012 ce ne sono alcune molto comode legate allo sviluppo di Web Application.

Quelle che ho apprezzato di più nell’uso quotidiano sono:

  • la visualizzazione Page Inspector
  • il supporto multi browser
  • l’estrazione di User Control
  • retrocompatibilità con Visual Studio 2010
  • anteprima delle immagini

Page inspector

Attivando il page inspector su una pagina aspx è possibile visualizzare all’interno di Visual Studio 2012 un’anteprima della pagina con l’inspector HTML simile a quello di Firebug.

view-in-page-inspector-VS-2012

page-inspector-VS-2012

Lo strumento è comodo perchè non è necessario passare al browser ma soprattutto si rivela molto efficace nel caso delle View in un progetto Asp.Net MVC.

Supporto multi browser

Gli shortcut F5 e CTRL-F5 sono da sempre serviti per avviare la web application in locale sul browser predefinito, rispettivamente con e senza debugger.

Un comodo menù visualizza adesso tutti i browser disponibili sulla macchina locale e consente di passare rapidamente da uno all’altro.

Multiple-browser

Estrazione di uno user control

Per creare uno user control partendo da una web form era necessario creare prima un nuovo user control, fare copia incolla dalla web form e inserire i tag register e uc nella web form.

Con Visual Studio 2012 tutte queste attività sono automatizzate tramite un singolo click:

estrazione user control in Visual Studio 2012

La funzione “Extract to User Control”:

  • richiede il nome e la posizione del nuovo user control
  • crea il nuovo oggetto con l’Html selezionato
  • inserisce nella web form i tag Register e uc

Extract-to-user-control-VS-2012-web-form

Anteprima delle immagini

Passando col mouse su un’immagine nella solution ne viene visualizzata un’anteprima:

anteprima immagini in Visual Studio 2012

Compatibilità della solution con Visual Studio 2010

Questo comportamento non riguarda solamente le Web Application ma la migrazione di una qualsiasi soluzione da Visual Studio 2010 a Visual Studio 2012.

Per la prima volta è possibile convertire la solution alla nuova release di Visual Studio mantenendo la compatibilità con la vecchia versione.

Importante: la compatibilità è garantita solo con Visual Studio 2010 con il Service Pack 1

Share

Che c’azzecca TFS con i metodi Agili? Ve lo racconto al Microsoft Dev Camp – Bologna

Giovedì 8 Novembre la community DotDotNet vi invita al Microsoft Dev Camp a Bologna.

L’evento è completamente gratuito e suddiviso in due parti.

Durante la mattina sarà possibile confrontarsi sui temi quali lo sviluppo su Windows 8, Windows Phone e Azure in un Lab pratico e interattivo.

Il pomeriggio invece seguirà un formato classico con alcune sessioni relative a Windows Azure, allo sviluppo di giochi, a TFS e ASP.Net.

Se non vi ho ancora annoiato abbastanza parlando di metodi Agili, SCRUM, TDD o Continuous Integration o se invece non ne avete ancora sentito parlare nel pomeriggio terrò una sessione su come sfruttare Team Foundation Server 2012 a supporto di un team Agile.

Come al solito al termine ci fermeremo a cena assieme.

Ci vediamo lì.

Agenda

Riporto il calendario completo dell’evento

ore 9.00

 


Registrazione

ore 9.30

 

Laboratorio Windows 8, Windows Phone e Azure

 

ore 13.30

Pranzo libero

ore 14.30

Anteprima Windows 8 e Windows Azure 

ore 15.00

Lorenzo Barbieri – Sviluppo giochi per Windows 8

C++ e DirectX/XAML, XAML e .NET, HTML 5 e JavaScript, MonoGame, Unity, altri framework open e closed. Ci sono moltissimi modi per realizzare giochi per il Windows Store che sfruttano appieno le caratteristiche di Windows 8 come il touch, la tastiera e il mouse, il supporto ai controller XBOX….

 

ore 16.00

Pausa

ore 16.15

Stefano Benedetti – Tecniche agili su TFS 2012: un esempio pratico

 

Test driven development, continuous integration, release often and early, visibility: sono alcuni dei principi e delle pratiche cardine del mondo Agile.
In questa sessione vedremo come concretizzarli con Visual Studio, il nuovo Team Foundation Server 2012 ed i suoi template Agili al fine di migliorare il processo di sviluppo ed il project management.

ore 17.15

Luca Milan e Igor Antonacci – Novità di ASP.NET 4.5 

In questa sessione, verranno illustrate le principalinovità di ASP.NET 4.5 attraverso lo sviluppo, passo passo, di un’applicazione Web moderna e responsiva. Con l’uso di Visual Studio 2012, vederemo com’è semplice introdurre le principali tecniche di ottimizzazione.

ore 18.15

Fine lavori

Location e data

Hotel Amadeus

Via M.E.Lepido 39
40132  Bologna 

Giovedì 8 novembre 2012 ore 9.00

Registrazione

L’evento è gratuito ma è richiesta la registrazione

Registrami al Microsoft Dev Camp a Bologna

Share

Installazione di Visual Studio 2012

Dato che la prossima settimana (il 12 settembre per la precisione) ci sarà l’evento di lancio di Visual Studio 2012 presso la sede di Microsoft (a cui partecipa anche DotDotNet) ho pensato che fosse l’ora di installarlo per cominciare ad utilizzarlo.

Intanto le prime considerazioni sull’installazione side-by-side.

Ogni release di Visual Studio è sempre accompagnata da una release del framework ed in particolare Visual Studio 2012 installa anche il .NET Framework 4.5.
Sia VS 2012 che il Framework 4.5 funzionano perfettamente side-by-side con tutte le precedenti versioni.

Normalmente quando si apre una soluzione creata con una vecchia versione di VS con una versione più recente viene aggiornato il file sln. Questo resta vero anche in questo caso con un solo distinguo: se la soluzione è stata creata con VS 2010 SP1 allora la soluzione resta accessibile anche da VS 2010 SP1. In particolare viene solo modificato il file format:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012

Questo resta valido finché non si utilizzano le feature specifiche di VS 2012 come ad esempio targettizzare un progetto al Framework 4.5 il che rende inaccessibile il file sln da Visual Studio 2010 SP1.

Alcuni tipi di progetto non sono più supportati in Visual Studio 2012. In questa pagina si possono vedere quali progetti sono completamente gestiti e quali no: Visual Studio 2012 compatibility.

Dopo un breve download dall’MSDN della versione Premium, circa 15 minuti per una ISO di 1,5GB, lancio l’installazione che richiede solo due interventi: l’accettazione della licenza e la selezione delle feature da installare:

Visual Studio 2012 setup - license agreement02 - Feature selection

A questo punto l’installazione richiede alcuni minuti, un riavvio e la conferma finale:

03 - Installing04 - Restart required05 - Visual Studio 2012 Setup complete

Alla prima esecuzione è possibile importare le impostazioni di una precedente versione di Visual Studio, selezionare come al solito la configurazione di sviluppo preferita (per me come sempre Web Development) e la quantità di documentazione da installare localmente:

06 - Visual Studio 2012 first run

Fine. Nel giro di 30’ minuti è possibile vedere il nuovo layout di Visual Studio 2012:

08 - Visual Studio 2012 layout09 - Visual Studio 2010 layout

Devo dire che il primo colpo d’occhio è notevolmente piacevole e pratico. Rispetto alla versione 2010 ci sono pochi colori, poche distrazioni, una grafica lineare e molto pulita.

Share

Trovare gli errori di binding in WPF e generare un’eccezione

Tip veloce che può fare risparmiare parecchio tempo.

Quando si effettua il binding in WPF è molto facile commettere errori di battitura (sempre che non si usi il designer o Blend) oppure è possibile modificare o eliminare la property nel ViewModel senza aggiornare lo XAML.

Ad esempio se credo un binding sbagliando la sintassi della property Description nel Path:

<GridViewColumn DisplayMemberBinding="{Binding Path=Descrition}" Header="Last name" Width="140" />

a runtime non viene visualizzato nulla ma soprattutto non viene sollevata nessuna eccezione.

Il metodo più veloce per visualizzare gli errori di binding è quello di eseguire l’applicazione in debug da Visual Studio: in questo modo tutti gli errori di binding vengono loggati nella finestra di Output.

Nell’esempio mi ritrovo un errore di questo tipo:

System.Windows.Data Error: 40 : BindingExpression path error: ‘Descrition’ property not found on ‘object’ ”Product’ (HashCode=55303339)’. BindingExpression:Path=Descrition; DataItem=’Product’ (HashCode=55303339); target element is ‘TextBlock’ (Name=”); target property is ‘Text’ (type ‘String’)

A questo punto potrebbe essere utile loggare questi errori sotto forma di eccezione anche a runtime (magari con Log4net).

In questo post viene spiegato come creare un listener sui binding di WPF per generare un’eccezione: Making WPF Binding Errors Exceptions

Share

Differenze tra web application e web site in Visual Studio

Ancora oggi mi capita spesso di trovare clienti che non conoscono la differenza tra un progetto di tipo Web Site ed uno di tipo Web Application in Visual Studio.

new-web-site

new-web-application

Web site project (WSP)

I progetti di tipo web site sono compilati dinamicamente. Sul web server vengono pubblicate tutte le pagine e i controlli con il markup ma anche tutti i sorgenti C#/VB.Net.

Ogni pagina è compilata la prima volta che viene richiesta e viene generata un’assembly per ogni file.

L’unico aspetto comodo dei web site è che è possibile seguire un ciclo di modifica tipico di un sito ASP classic in cui si modifica la pagina e la si pubblica senza dover ricompilare l’intero progetto.

Ovviamente in scenari anche minimamente complessi non è certamente questo il motivo per scegliere di sviluppare un progetto web site.

Tra l’altro la proliferazione di queste DLL combinata con l’eventuale frequente modifica dei namespace potrebbe causare errori di runtime.

I web site project hanno una cartella particolare App_Code in cui è possibile inserire direttamente delle classi C#/VB.Net. Anche queste devono essere copiate sul web server e vengono compilate dinamicamente.

Continuous integration e deploy

I web site non si integrano facilmente nei processi di Continuous Integration. Ad esempio un web site non consente di gestire gli eventi di pre e post build.

Il deploy viene effettuato tramite un normale XCopy oppure da Visual Studio sfruttando il tool Copy Web Site.

Copy-web-site

Web application project (WAP)

I progetti di tipo web application sono precompilati in un’unica DLL.

In questo caso il deploy riguarda le pagine ed i controlli con il markup ma non i file di code behind che vengono sostituiti dall’unica DLL nella cartella Bin.

Al contrario di un web site per pubblicare una modifica è necessario ricompilare l’intero progetto.

Continuous integration e deploy

La web application genera una normalissima assembly .Net semplificando il deploy ed il testing.

Anche il versioning risulta facilitato in quanto come ogni assembly contiene tra le altre le informazioni di Assembly Version e File Version.web-application-publish

Per effettuare il deploy si può usare lo strumento Publish di Visual Studio oppure creare un Deployment Package che può essere direttamente installato in IIS.

In entrambi i casi gli artefatti da mettere sul web server contengono esclusivamente pagine e controlli e le DLL delle cartella bin.

Tutti i file esclusi a livello di soluzione ed i sorgenti non vengono copiati/impacchettati.

Riassunto delle principali differenze

Web site Web application
Compilazione Dinamica, un’assembly per ogni singola pagina.
Effettuata la prima volta che viene richiesta la pagina o ad ogni modifica
Compilazione dell’intera web application e generazione di un’unica assembly
Deploy Deploy di pagine e controlli.
Deploy di tutti i file sorgenti di code behind
Deploy di pagine e controlli.
Deploy dell’assembly generata nella cartella bin
Strumenti di deploy Copy web site Publish
Build deployment package
Continuous Integration Non dispone di eventi di pre/post build Gestisce gli eventi di pre/post build
L’assembly contiene le informazioni di versione
Gestione file Tutti i file su file system sono obbligatoriamente compresi nel web site project Granulare:
– è possibile escludere dei file a livello di progetto in Visual Studio
– è possibile specificare quali file compilare/copiare/embeddare

Concludendo non esistono dubbi per me che la soluzione per ogni progetto che sia minimante più grande della gestione dei DVD di casa debba essere sviluppata tramite una web application.

Tra l’altro la compilazione in Visual Studio di un Web Site di una certa dimensione risulta molto più lenta di quella di una Web Application.

Può capitare di avere ancora dei vecchi progetti web site. Consiglio la lettura dell’articolo di Scott Guthrie che elenca gli step necessari per fare l’upgrade e le modifiche necessarie.

Riferimenti

ASP.NET: Web Site or Web Application?

Upgrading VS 2005 Web Site Projects to be VS 2005 Web Application Projects

Share

Gestire le virtual directory con IIS Express

Uno degli aspetti principali di IIS Express è la sua flessibilità e configurabilità al pari di IIS “completo”, e ben superiori a Cassini.

Una delle necessità più frequenti è quella di configurare una virtual directory (si pensi ad esempio ad una cartella images posizionata al di fuori del web site).

Per configurare le virtual directory in IIS Express è sufficiente modificare il file applicationhost.config che si trova nella cartella Users/<username>/IISExpress/Config.

All’interno della sezione sites individuare il sito in cui si vuole gestire la virtual directory e aggiungere una nuova application.

Ad esempio:

<site name="WebSiteWithVirtualDirectory" id="1">
  <application path="/" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="c:tempwebsite1" />
  </application>
  <application path="/Images" applicationPool="Clr4IntegratedAppPool">
    <virtualDirectory path="/" physicalPath="d:tempImages" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation="*:1132:localhost" />
  </bindings>
</site>

configura un sito su IIS Express in questo modo:

localhost:1132 -> punta alla cartella c:tempwebsite1

localhost:1132/Images -> punta alla cartella d:tempimages

Da notare che è possibile configurare sito e virtual directory in maniera completamente autonoma, ad esempio impostando diversi application pool.

Share

Tip: non fare il deploy del file packages.config di NuGet

Il file packages.config contiene l’elenco di tutti i package NuGet installati nel progetto e si trova nella root del progetto stesso.

Di default il file ha come Build Action il valore “Content”.

Questo vuol dire che quando si effettua un deploy automatico di una web application (ad esempio sfruttando il publish di Visual Studio) anche il file packages.config viene copiato nell’ambiente di destinazione.

Consiglio quindi di impostare la Build Action a “None” in tutti i progetti.

Share