Utiliser la CLI Cordova pour windows avec seulement Visual Studio 2017

Si comme moi vous décidez de n'installer que Visual Studio 2017 sur votre machine (après un formatage par exemple), vous rencontrerez peut être les même problèmes que moi en utilisant les actions en ligne de commande issue du package npm pour cordova. Nous verrons donc comment remédier à cela.

MSBuild 14.0 vs 15.0

Comme évoqué dans la suite de cet article, les problèmes à traiter sont multiples et le premier concerne MSBuild, que les outils microsoft utilisent pour compiler des programmes. Une application Cordova compilée pour Windows ne fait pas exception à la règle, même en utilisant la CLI.

Symptômes

Après avoir créé un projet Cordova avec Visual Studio 2017, tout se passe bien au sein de Visual Studio, les opérations de compilation et de démarrage du projet fonctionnent correctement. Par contre, lorsque l'on essaie de réaliser les mêmes opérations en ligne de commande, les choses se compliquent. Habituellement, on aurait utilisé la commande suivante :

cordova build windows

Voici un message d'erreur possible :

D:\tmp\myApp\platforms\windows\CordovaApp.Windows.jsproj(70,3): error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\JavaScript\Microsoft.VisualStudio.WJProject.Default.props" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Error: C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe: Command failed with exit code 1

D'après ce message, on comprend que le fichier de projet à compiler n'est pas correct. Ce n'est pas tout à fait vrai comme nous allons le voir.

Explications

En décorticant le message d'erreur précédent, on note premièrement la version de MSBuild utilisée : 14.0. Avec cette version de MSBuild, on fait appel à des fichiers installés avec Visual Studio 2015, absents de la machine. Or la nouvelle version de MSBuild se trouve être la 15.0, ce qui peut déjà offrir une piste quant au problème survenu. En creusant un peu, notamment dans les scripts nodejs de build cordova se trouvant dans le dossier platforms\windows\cordova\lib, on s'aperçoit que le code prévoit de découvrir la dernière version de MSBuild disponible via des clefs de registre ou via une variable d'environement. Concernant le premier cas, ce n'est plus possible si l'on se réfère à cet article : https://docs.microsoft.com/en-us/visualstudio/msbuild/what-s-new-in-msbuild-15-0. Il faut donc se rabbattre sur la deuxième possibilité, celle d'une variable d'environement.

Solutions

La solution est donc simple dans ce cas, ajouter la variable d'environement (Système) VSINSTALLDIR, avec comme valeur le répertoire suivant C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise. Evidemment, ce répertoire peut changer selon le répertoire d'installation défini lors de l'installation de Visual Studio.

Pour ajouter une variable d'environement : Panneau de contrôle, Système et sécurité, Système, modifier les options, onglet d'options avancées, variables d'environement.

N'oubliez pas de fermer vos consoles ouvertes après avoir ajouté cette variable, sinon elle sera ignorée.

Si toutefois une nouvelle erreur survenait, il faut penser à compiler pour Windows 10 uniquement. Ce point est confirmé si vous obtenez l'erreur suivante :

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets (2195,5): error MSB3774: Could not find SDK "Microsoft.WinJS.2.0, Version=1.0". [D:\tmp\myApp\platforms\windows\CordovaApp.Windows.jsproj] 
Error: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\msbuild.exe: Command failed with exit code 1

 Vous pouvez alors ajouter un argument à votre commande comme ceci :

cordova build windows -- --appx=uap

Il est aussi possible d'ajouter cette option par défaut via le fichier config.xml en ajoutant le noeud suivant :

<preference name="windows-target-version" value="10.0" />

 

Nous avons vu dans cet article comment face aux problèmes de CLI Cordova lorsque seul Visual Studio 2017 est installé sur la machine. Il n'est pas nécessaire de changer la version des outils de build cordova comme je l'ai tout d'abord cru (cordova platform update windows@5.0.0). 

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus