Windows Phone 7 e i linguaggi VB.Net e F#

(Post liberamente tradotto dal post pubblicato qui
http://justinangel.net/WindowsPhone7VBnetAndFsharp
da Justin Angel. Utilizzo del post espressamente autorizzato dallo stesso autore)

Salve gente,

In questo articolo esamineremo il supporto a Windows Phone 7 per i linguaggi di programmazione Visual Basic .NET e F#.
Il nostro obiettivo è quello di dimostrare che Windows Phone 7 invece può supportare le librerie di codice F# e VisualBasic.Net e i controlli utente.

Potete scaricare il progetto di esempio che abbiamo costruito in questo articolo da qui: http://JustinAngel.net/storage/WP7.Languages.zip.

Perchè?! Perché Microsoft ci ha abbandonato?!

Man in agony

La lettura del supporto online su Windows Phone 7 con VB.Net & F# può essere alquanto fuorviante.

Sui forum ufficiali MSDN WP7 possiamo trovare il seguente commento:

“Windows Phone 7 attualmente è supportato solo per C#” Mark Chamberlain

Durante il webcast di Windows Phone 7 un membro del pubblico ha chiesto il sostegno di VB.Net e fu risposto:

“Ho paura che Visual Basic non sia supportato per i dev di WP7” – Andy Wigley

Sul forum ufficiale Silverlight WP7 possiamo trovare molte domande circa il supporto di VB.NET in WP7 con risposte come:

Q: “Posso sviluppare applicazioni con VB.NET per Windows Phone 7?

A: “No, non puoi.

Nel blog tecnico TechRepublic è citato:

L’unico linguaggio che funzionerà sarà C#; non c’è necessità di adottare VB.NET.”  TechRepublic

E il “Canadian Heritage”, Ministro di lingue ufficiali, l’onorevole MP James Moore ha detto:

“Il mio cane indossa un impermeabile di partito conservatore”

DogInARainCoat

Tutte le indicazioni di cui sopra, ad eccezione dell’ultima, sono tutte palesemente false. L’ultima dichiarazione è solo semplicemente imbarazzante.
Windows Phone 7 infatti supporta Visual Basic .NET e F# e lo fa dal giorno numero 1.

Le applicazioni Windows Phone 7 sono in C#

L’unica dichiarazione che può essere fatta e che è oggettivamente vera è che durante la Beta WP7 l’unica lingua supportata per il progetto di applicazione WP7 stesso è C#.
Il che significa assolutamente nulla, poiché un’applicazione WP7 può fare riferimento a una libreria di Silverlight 3 in F# o in VB.NET.

Utilizzare F# in Windows Phone 7

Vediamo come installare una semplice applicazione WPF "Ciao mondo" con F#.

1) Create una nuova Applicazione Windows Phone 7 in C#.

Create new C# WP7 app

2) aggiungete un progetto di libreria F# Silverlight alla soluzione.

Add new project to the solution

Select project type F# Silverlight project

Use Silverlight version 3

3) Aprite il file module1.fs e scrivi del codice F#.
Faremo questo esempio di base con un semplice esempio non-UI "Hello world".

module WP7FSharpLibrary

 

type myClass = class

    new () as this = {}

    member s.myMethod() =

        "OMG! Windows Phone 7 is running F# code!"

end

 

3) Aggiungete un riferimento dall’applicazione WP7 alla nuova libreria F# e compilate la soluzione.

 

4) nell’applicazione C# in WP7, inizializzate la classe F# e invocate i membri appropriati.

        // Constructor

        public MainPage()

        {

            InitializeComponent();

 

            var FSharpClass = new WP7FSharpLibrary.myClass();

            ContentGrid.Children.Add(new TextBlock() { Text = FSharpClass.myMethod()});

        }

 

Quando eseguiamo la nostra applicazione possiamo chiaramente vedere che F# si esegue in Windows Phone 7 senza un intoppo.

The WP7 emulator running F# code

È anche possibile avere F# che inizializza i vari elementi dell’interfaccia utente e che crea l’interfaccia utente per noi. Ma questo non è davvero un compito in cui la programmazione funzionale eccelle, per cui eviterò di dimostrare questa cattiva pratica.

Utilizzare un UserControl Visual Basic .Net in Windows Phone 7

1) Create una nuova applicazione C# in Windows Phone 7.

Create new C# WP7 app

2) Aggiungete un progetto di libreria Silverlight in VisualBasic.net alla soluzione.

Add new project to the solution

Select a Visual Basic Silverlight Class Library

Using Silverlight version 3

3) Aggiungete un nuovo UserControl al progetto VB.Net Silverlight.

Nel nostro caso aggiungeremo un controllo utente semplice con un <ListBox /> con pochi elementi.    

Partial Public Class SL3VbNetUserControl

    Inherits UserControl

 

    Public Sub New

        InitializeComponent()

 

        Me.DataContext = {"Hello from VB.Net on WP7!", "World", "Foo", "Bar", "Baz"}

    End Sub

 

End Class

 

<UserControl x:Class="WP7.VisualBasicNet.SL3VbNetUserControl"

   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;

   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml&quot;

   xmlns:d="http://schemas.microsoft.com/expression/blend/2008&quot;

   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006&quot;

   mc:Ignorable="d"

   d:DesignHeight="300" d:DesignWidth="400">

 

    <Grid x:Name="LayoutRoot">

        <ListBox ItemsSource="{Binding}" />

    </Grid>

</UserControl>

 

4) Aggiungete un riferimento dall’applicazione WP7 alla nuova libreria VB.Net e compilate.

5) Aggiungete il nuovo UserControl in SilverLight (VB.Net) alla MainPage nel progetto WP7.

<!–ContentPanel – place additional content here–>

<Grid x:Name="ContentGrid" Grid.Row="1">

    <VisualBasicNet:SL3VbNetUserControl xmlns:VisualBasicNet="clr-namespace:WP7.VisualBasicNet;assembly=WP7.VisualBasicNet" />

</Grid>

 

6) Se tentiamo di eseguire il progetto a questo stato, vedremo il seguente avviso di compilazione:

Warning    1    The primary reference "d:\visual studio 2010\Projects\WP7.Languages\WP7.VisualBasicNet\Bin\Debug\WP7.VisualBasicNet.dll" could not be resolved because it has an indirect dependency on the framework assembly "Microsoft.VisualBasic, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" which could not be resolved in the currently targeted framework. "Silverlight,Version=v4.0,Profile=WindowsPhone". To resolve this problem, either remove the reference "d:\visual studio 2010\Projects\WP7.Languages\WP7.VisualBasicNet\Bin\Debug\WP7.VisualBasicNet.dll" or retarget your application to a framework version which contains "Microsoft.VisualBasic, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35".    WP7.Languages

Build errors if the Microsoft.VisualBasic.dll reference is missing

Assicuratevi di aggiungere un riferimento dall’applicazione WP7 a Microsoft.VisualBasic.dll e che questa sia contrassegnata come "copia locale = false".

Nel mio sistema di sviluppo trovo la DLL qui: c:\Program Files (x86)\Microsoft Silverlight\4.0.50524.0\Microsoft.VisualBasic.dll

Add Reference context menu on right click

Adding a reference to  c:\Program Files (x86)\Microsoft Silverlight\4.0.50524.0\Microsoft.VisualBasic.dll

Con un click destro sul riferimento “Microsoft.VisualBasic”, scegliete “properties” e impostate “Copy Local” a falso (False)”.

Right click on Microsoft.VisualBasic and choose properties

Setting "Copy Local" to false

Dopo questo cambiamento possiamo eseguire il nostro progetto e lo UserControl Silverlight (Visual Basic .NET) appare nel nostro progetto Windows Phone 7.

Windows Phone 7 Emulator running a Viusal Basic .Net user control

 

Ovviamente, dopo aver aggiunto le DLL di Windows Phone 7 al nostro progetto VB.Net saremmo in grado di fare tutto ciò che può fare un possibile progetto C#: posizione GPS, notifiche Push, accelerometro, navigazione, eccetera.

Fine

Windows Phone 7 supporta tutti e tre i principali linguaggi di programmazione .NET 4.0: C#, VisualBasic.Net e F#.
Benché sia supportato solo C# durante la beta WP7 come radice dell’applicazione WP7, questo è un piccolo ostacolo che possiamo facilmente superare.

A seguito di questo post del blog mi aspetto che sia gli sviluppatori F# sia quelli di VB.Net  producano alcune applicazioni WP7. Sì, sto guardando proprio voi.

Pubblicato il 28 agosto 2010 su Novità. Aggiungi ai preferiti il collegamento . 1 Commento.

  1. Thank you very much Justin Angel! 🙂

    Mi piace

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: