Category Archives: Visual Studio for Mac

Visual Studio for Mac : Error CS0518 / CS0246 en utilisant MSBUILD en ligne de commande

Visual Studio for Mac est disponible en version finale depuis quelques semaines maintenant, et son utilisation en remplacement de Xamarin Studio devient la norme sur bon nombre de projets, notamment ceux qui démarrent maintenant (le risque de faire la transition pouvant être jugé trop important quand vous êtes en phase de finalisation / soumission d’un projet sur les stores).

Parmi les nouveautés de Visual Studio for Mac, se situe la possibilité d’utiliser les projets .NET Standard au sein de vos applications Xamarin, et le fait d’utiliser MSBUILD à la place de XBUILD pour compiler vos projets.

C’est en utilisant cette combinaison qu’un problème très bizarre au premier abord est survenu sur mes environnements de travail. Je vous propose donc un petit retour d’expérience rapide si jamais vous êtes confrontés au même problème.

Alors que mon application compilait sans problème lorsque la solution était ouverte dans Visual Studio for Mac, celle-ci refusait obstinément de compiler en mode ligne de commande en utilisant MSBUILD.

Ce problème se produisait aussi bien sur mon machine de développement que sur le serveur d’intégration continue (TeamCity) sur lesquels l’installation de Visual Studio for Mac avait été réalisée en utilisant la dernière version de l’installeur disponible sur le site de Microsoft.

Sur la machine d’un de mes collègues, le problème ne se produisait pas ce qui me laissait perplexe quant à la source du problème. Les messages d’erreur obtenus par centaines ressemblaient à ceux présentés ci-dessous :

error CS0518: Predefined type 'System.Void' is not defined or imported
error CS0518: Predefined type 'System.String' is not defined or imported
error CS0518: Predefined type 'System.Object' is not defined or imported
error CS0246: The type or namespace name 'Dictionary<,>' could not be found (are you missing a using directive or an assembly reference?)

Après de longues heures de recherche, la source du problème a été identifiée en comparant la configuration de ma machine avec celle sur laquelle cela fonctionnait.

Ci-dessus ma machine sur laquelle cela ne fonctionnait pas et ci-dessous la machine sur laquelle cela fonctionnait sans soucis (celle du développeur qui avait ajouté le projet .NET Standard à la solution).

Comme on peut le voir dans la colonne de gauche de ces écrans, des types de projets supplémentaires dans la section .NET Core apparaissent sur la machine où cela fonctionnait.

En demandant à mon collègue s’il avait fait quelque chose de particulier pour avoir ces types de projets à disposition, la réponse a évidemment été négative et que c’est l’installation de Visual Studio for Mac avait tout fait pour lui sans rien avoir à ajouter.

Même si je ne m’explique toujours que partiellement comment cela pouvait fonctionner dans Visual Studio for Mac et pas en ligne de commande sur ma machine et l’agent TeamCity, la simple installation manuelle de .NET Core SDK sur les 2 machines a résolu la situation et les messages d’erreurs ont disparu lors de la compilation du projet en ligne de commande via MSBUILD.

Pour télécharger et installer .NET Core comme je l’ai fait, il suffit de vous rendre sur cette page.

A noter que j’ai téléchargé une nouvelle fois l’installeur de Visual Studio for Mac sur une machine flambant neuve la semaine dernière, et que le même problème est survenu. Il semble que dans certains cas indéterminés pour l’instant, .NET Core ne soit pas systématiquement installé en même temps que tous les autres composants téléchargés par le programme d’installation.

Advertisements