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é 🙂

 

Comments are closed.