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.