(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?!
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”
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#.
2) aggiungete un progetto di libreria F# Silverlight alla soluzione.
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.
È 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.
2) Aggiungete un progetto di libreria Silverlight in VisualBasic.net alla soluzione.
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"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
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
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
Con un click destro sul riferimento “Microsoft.VisualBasic”, scegliete “properties” e impostate “Copy Local” a falso (False)”.
Dopo questo cambiamento possiamo eseguire il nostro progetto e lo UserControl Silverlight (Visual Basic .NET) appare nel nostro progetto Windows Phone 7.
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.