Ajouter des références binaires spécifiques à une plateforme dans un csproj

Posted by & filed under Dev'.

Voici comment ajouter dans un projet une dépendance (référence) sur une libraire compilée dépendante de la plateforme.

En effet, lorsque l’on travaille en interaction avec des librairies natives en particulier dans le cas des applications du Windows Store / Windows Phone Store, on va se retrouver avec deux versions du même binaire à inclure dans son projet, en fonction de l’architecture du CPU qui va faire tourner l’application :

  • x86
    • Windows : Les PC/Tablettes sous Windows 8.x (Surface Pro, …)
    • Windows Phone : l’émulateur
  • ARM
    • Windows : Les tablettes sous Windows RT 8.x (Surface classique, …)
    • Windows Phone : tous les smartphones du marché

Visual Studio, via son menu Add Reference… ne permet pas de faire cette manipulation, il faudra pour cela modifier manuellement le fichier .csproj

La variable concernant la plateforme dans les projets Windows Phone se nomme ‘$(Platform)’ et vaut soit ‘x86′ soit ‘ARM’.

Ouvrez votre fichier .csproj et repérez l’ItemGroup où sont déclarées vos références, voici un exemple :

<ItemGroup>
  <Reference Include="Newtonsoft.Json">
    <HintPath>..\packages\Newtonsoft.Json.6.0.3\lib\portable-net45+wp80+win8+wpa81\Newtonsoft.Json.dll</HintPath>
  </Reference>
  <Reference Include="System.Net.Http">
    <HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\sl4-windowsphone71\System.Net.Http.dll</HintPath>
  </Reference>
  <Reference Include="System.Net.Http.Extensions">
    <HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\sl4-windowsphone71\System.Net.Http.Extensions.dll</HintPath>
  </Reference>
  <Reference Include="System.Net.Http.Primitives">
    <HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\sl4-windowsphone71\System.Net.Http.Primitives.dll</HintPath>
  </Reference>
</ItemGroup>

En dessous, ajoutez deux nouveaux ItemGroup conditionnés par la plateforme courante et contentant les références vers vos binaires spécifiques :

<!-- Platform dependant libraries references -->
<ItemGroup Condition=" '$(Platform)' == 'ARM' ">
  <Reference Include="MyLibrary">
    <HintPath>..\Libs\ARM\Release\MyLibrary.dll</HintPath>
  </Reference>
</ItemGroup>
<ItemGroup Condition=" '$(Platform)' == 'x86' ">
  <Reference Include="MyLibrary">
    <HintPath>..\Libs\x86\Release\MyLibrary.dll</HintPath>
  </Reference>
</ItemGroup>

Enregistrez le tout et réouvrez le projet dans Visual Studio, le tour est joué :)

 

Mise à jour du Tile Tookit for Windows Phone

Posted by & filed under Non classé.

Suite à quelques demandes de support sur le projet, j’ai mis à jour le Tile Toolkit for Windows Phone en ce début 2014.
Les nouveautés pour cette version 1.2.0.0 concernent :

  • Le support natif de Windows Phone 8, avec la possibilité de définir la taille de rendu (Small, Medium ou Wide) dans le conteneur de tuile, ce qui évite d’avoir à surcharger la classe.
  • La proposition de modèles XAML pré-définies (des exemples à proprement parler) pour les tuiles Small et Wide embarquées dans le projet.
  • Un travail sur l’encodeur PNG (déclainaison maison) afin d’éviter toute copie des données Bitmap en mémoire et avoir une empreinte la plus réduite possible afin de réduire le risque d’OutOfMemoryException lorsque la librairie est utilisée depuis une tâche en arrière plan.
  • La fourniture d’un helper permettant de charger et d’attendre la disponibilité d’un BitmapImage, problème classique rencontré par les utilisateurs de la librairie qui effectuaient le rendu de leur tuile avant que les images soient disponibles et obtenaient donc des « trous » dans leurs rendus.
  • La librairie est toujours fournie sous la forme d’une Class Library Windows Phone 7.1 et donc rétrocompatible sur WP7. Avec les changements qui se profilent pour WP8.1, ce sera sans doute la dernière version disponible pour cette plateforme.

Le source (et le sample !) est toujours disponible sur CodePlex : http://wptiletoolkit.codeplex.com/
Et vous pouvez installer le package NuGet via la commande suivante :

PM&gt; Install-Package Ree7.WPTileToolkit