martedì 21 febbraio 2012

Windows Virtual PC & Microsoft Device Emulator

In questi giorni ho ripreso in mano un progetto basato su Windows Mobile 6.x e con mia sorpresa ho scoperto che l’emulatore di WM6 non riusciva più a riconoscere la scheda di rete (NE2000 PCMCIA). L’errore riportato era il seguente:

The required Virtual Machine Network Driver could not be found. Make sure that Virtual PC 2007 is installed. You can install Virtual PC 2007 from http://go.microsoft.com/fwlink/?linkid=46859.

Pensando un po' ho fatto mente locale ricordando che l’installazione di Windows Virtual PC richiedeva la disinstallazione di Virtual PC2007. Morale: l’emulatore non funziona con i nuovi drivers di  Windows Virtual PC. Cercando in rete ho trovato diverse soluzioni al caso molto simili ma quella che mi ha risolto il problema è la seguente:

  • Download Virtual PC 2007 SP1
  • Rinominare l’eseguibile setup.exe in vpc.exe
  • Aprire una shell dos ed eseguire il comando vpc.exe /c
  • Questo comando estrae il file MSI nel folder %temp%
  • Posizionarsi nel folder ed eseguire il comando msiexec /a Virtual_PC_2007_Install.msi /qb TARGETDIR=c:\vpc
  • Questo estrae i files del MSI nel folder c:\vpc
  • Aprire “Centro connessioni di rete e condivisione” e selezionare “Modifica Impostazioni scheda”

  • Selezionare la scheda di rete con cui ci si connette ad internet e aprire le proprietà della stessa
  • Premere il pulsante “Installa”

  • Selezionare “Servizio”

  • Selezionare “Disco Driver…”

  • Navigare in C:\vpc\Program Files\Microsoft Virtual PC\Utility\VMNetSrv\ per i sistemi x86 e in C:\vpc\Program Files\Microsoft Virtual PC\Utility\VMNetSrv\x64  per i sistemi a x64
  • Selezionare il file “VMNetSrv.inf”
  • Selezionare Virtual Machine Network Services e confermare

  • A questo punto il driver è installato e collegato alla scheda selezionata, se si vuole installare lo stesso driver su più schede si deve ripetere la procedura dal punto 8 per ogni singola scheda.

giovedì 16 febbraio 2012

Hack Reality, ci siamo quasi

Dopo il rinvio di due settimane fa causa abbondante nevicata e conseguenti disagi, sabato 18 febbraio si terrà a Bologna l’incontro di Hack Reality, l’evento di hackathon targato WhyMCA orientato all'interazione tra mobile e realtà. Io sarò presente con gli altri colleghi di TinyCLR.it con cui presenteremo dei brevi workshop inerenti il mondo .NET MicroFW, sicuramente ci sarà da divertirsi! Vi aspetto numerosi.

mercoledì 25 gennaio 2012

TinyCLR.it a HACK REALITY

Il prossimo 4 febbraio si terrà a Bologna “Hack Reality”, il nuovo hackathon targato WhyMCA, orientato all'interazione tra mobile e realtà. Fra le varie tecnologie utilizzabili ci sarà spazio anche per .NET Micro Framework quindi per gli appassionati del genere sarà una bella occasione per mettersi alla prova e creare qualcosa di originale sia con il .NET MF che con le altre interessanti tecnologie disponibili. Ci vediamo a Bologna per “interagire con la realtà”.

.NETCF: ResolveAssemblyReferences warnings

Durante lo sviluppo di un progetto per .NET CF mi è capitato di incontrare diversi warning del tipo:

ResolveAssemblyReferences: Consider app.config remapping of assembly "System.Windows.Forms, Culture=neutral, PublicKeyToken=969db8053d3322ac, Retargetable=Yes" from Version "2.0.0.0" [] to Version "3.5.0.0" [C:\Program Files\Microsoft.NET\SDK\CompactFramework\v3.5\ WindowsCE\System.Windows.Forms.dll] to solve conflict and get rid of warning.

Questo avviso viene visualizzato quando il compilatore ha caricato le librerie BCL del .NET Compact Framework 3.5, ma i metadati contenuti nei assembly referenziati fanno riferimento alle librerie BCL del .NET Compact Framework 2.0.

Per rimuovere questi warning è possibile aggiungere un file app.config al progetto e reindirizzare le associazioni degli assembly della 2.0 a gli equivalenti della 3.5. Di seguito è riportato un esempio di XML per reindirizzare la versione 2.0 di System.dll alla versione 3.5:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblybinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentassembly>
        <assemblyidentity name="System" culture="neutral" publickeytoken="969db8053d3322ac" />
        <bindingredirect  newVersion="3.5.0.0" oldVersion="2.0.0.0" />
      </dependentassembly>
    </assemblybinding>
  </runtime>
</configuration>

Sarà necessario aggiungere un elemento dependentassembly per ognuno dei warning ResolveAssemblyReferences che si ricevono dal compilatore.


In fine, assicurarsi che la proprietà Build Action del file app.config sia impostata su Content e la proprietà di Copy To Output Directory sia impostata su Only if newer

mercoledì 11 gennaio 2012

XeDotNet – Prossimi meeting

Anno nuovo, nuovo calendario di sessioni per il primo semestre 2012 di XeDotNet.

10/02/2012 - HTML5 e lo sviluppo mobile
  • Andrea Dottor - ASP.NET e lo sviluppo mobile?
  • Davide Senatore - Packaging HTML5 application with PhoneGap
09/03/2012 - Sviluppo client side
  • Andrea Boschin - What's new in Silverlight 5.0
  • Andrea Dottor - Il mondo è sempre più client. ASP.NET e lo sviluppo Client Side
30/03/2012 - Real world experience
  • Cristiano Simionato - Ma quanto costa Windows Azure?
  • Mirco Vanini - REST & .NET Micro FW - A Real Case
04/05/2012 - Uno sguardo a futuro
  • Davide Vernole - Visual Studio vNext - Application Lifecycle Management
  • Andrea Boschin - Sviluppare applicazioni Metro con Windows 8 e WinRT
15/06/2012 - Playing with gadgets
  • Mirco Vanini - Are you a Gadgeteer?
  • Davide Vernole - Playing with Team Foundation Server

In questo semestre avrò il piacere di tenere due sessioni su argomenti ed esperienze che mi vedono impegnato in prima persona sia nell’ambito lavorativo sia nell’ambito di community. La prima sessione sarà basata su un caso reale mentre la seconda riguarderò il .NET Gadgeteer.

    sabato 7 gennaio 2012

    NETMF Extension Methods

    Una delle caratteristiche più accattivanti di C# sono gli extension methods, peccato che per il .NET MicroFW non siano disponibili. Infatti tentando di utilizzarli si ottiene il seguente errore:

    Cannot define a new extension method because the compiler required type 'System.Runtime.CompilerServices.ExtensionAttribute' cannot be found. Are you missing a reference to System.Core.dll?

    Cercando una possibile soluzione ho trovato questo post che riporta la soluzione al problema:

    using System;
    using System;
    using System.Threading;
     
    using Microsoft.SPOT;
    using Microsoft.SPOT.Hardware;
     
    // Required for NETMF to recognized extension methods
    namespace System.Runtime.CompilerServices
    {
        [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)]
        public sealed class ExtensionAttribute : Attribute { }
    }
     
    // Extension methods for byte[] - typically would be put in a separate file
    public static class ByteArrayExtensions
    {
        // Method to create a string from UTF8-encoded bytes - be careful about null "this" being passed in
        public static string ToStringFromUTF8(this byte[] bytes)
        {
            return null == bytes ? String.Empty : new String(System.Text.Encoding.UTF8.GetChars(bytes));
        }
    }


    Come si vede dal codice riportato il trucco è definire l’attributo ExtensionAttribute.