Que faire quand omnisharp ne fonctionne plus correctement avec VS Code ?
Publié le 21/05/2022
Par  Christophe MOMMER

Le contexte

Avec mon cours sur C# 10 et .NET 6 (qui ne va pas tarder à migrer en C#11 et .NET 7 d'ailleurs), j'utiliser Visual Studio Code comme IDE, avec le plugin Omnisharp pour le support de C#. J'ai fait ce choix pour faire en sorte que la plus grande partie des développeurs puissent apprendre le langage, VS Code étant très répandu chez les développeurs PHP, JavaScript ou encore Python.

Pour le coup, la stabilité et le panel fonctionnel d'omnisharp ne valent pas toujours un Visual Studio Windows et d'ailleurs, l'installation de ce dernier peut provoquer des plantages...

Les symptômes

Lorsque j'ai ouvert mon VS Code après avoir installé la dernière version de Visual Studio Windows, tous les mots-clés se sont soulignés en rouge ... J'ai donc ouvert la sortie pour voir les logs produits par Omnisharp. J'avais cette erreur-là en tout dernier, qui franchement n'est pas très parlante :

Received response for /v2/getcodeactions but could not find request.

 

Du coup, j'ai remonté la liste de logs et j'ai vu que le plugin a listé plusieurs emplacements pour MSBuild. C'est donc ça ! Omnisharp a perdu les pédales, car il tente d'utiliser le moteur MSBuild présent avec Visual Studio (qui du coup semble trop "récent" pour lui ou je ne sais pas trop quoi). Il faut donc lui dire d'utiliser le sien !

La solution

La solution est "assez simple" quand on la connait : reconfigurer omnisharp pour utiliser le moteur MSBuild autonome fourni avec le plugin VS Code. Ainsi, il faut créer un fichier omnisharp.json (au même niveau que le csproj du projet impacté) avec le contenu suivant :

{
    "MSBuild": {
        "msbuildoverride": {
            "MSBuildPath": "C:\\Users\\Chris\\.vscode\\extensions\\ms-dotnettools.csharp-1.24.4-win32-x64\\.omnisharp\\1.38.2\\.msbuild\\Current\\Bin",
            "Name": "OmniSharp MSBuild",
            "PropertyOverrides": {
                "MSBuildExtensionsPath": "C:\\Users\\Chris\\.vscode\\extensions\\ms-dotnettools.csharp-1.24.4-win32-x64\\.omnisharp\\1.38.2\\.msbuild"
            }
        }
    }
}

Du coup, je le saurai ! Et ce billet me permettra de m'en rappeler ...

Ah oui, inutile de bêtement copier-coller le json ci-dessus : il faut modifier les valeurs pour que ça corresponde à VOTRE installation (donc utiliser votre nom d'utilisateur Windows avec C:\Users\. Aussi, vérifiez les versions en naviguant avec l'explorateur pour utiliser les bonnes.

Une fois le fichier créé, vous pouvez supprimer le dossier "obj" et redémarrer VS Code. S'il faut toujours le capricieux (ça m'est arrivé), on ouvre le terminal et on lui rabat le caquet avec un petit "dotnet build". Et hop, on peut repartir pour le code !