mercoledì 25 gennaio 2012

.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