Résoudre les problèmes d’utilisation des outils .NET
Vous pouvez rencontrer des problèmes lors de la tentative d’installation ou d’exécution d’un outil .NET, qui peut être un outil global ou un outil local. Cet article décrit les causes racines courantes et certaines solutions possibles.
Échec de l’exécution de l’outil .NET installé
Lorsqu’un outil .NET ne parvient pas à s’exécuter, vous rencontrez probablement l’un des problèmes suivants :
- Le fichier exécutable de l’outil n’a pas été trouvé.
- La version correcte du runtime .NET n’a pas été trouvée.
Fichier exécutable introuvable
Si le fichier exécutable est introuvable, un message semblable à ce qui suit s’affiche :
Could not execute because the specified command or file was not found.
Possible reasons for this include:
* You misspelled a built-in dotnet command.
* You intended to execute a .NET program, but dotnet-xyz does not exist.
* You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
Le nom de l’exécutable détermine la façon dont vous appelez l’outil. Le tableau suivant décrit le format :
Format du nom de fichier exécutable | Format d’appel |
---|---|
dotnet-<toolName>.exe |
dotnet <toolName> |
<toolName>.exe |
<toolName> |
Outils globaux
Les outils globaux peuvent être installés dans le répertoire par défaut ou dans un emplacement spécifique. Les répertoires par défaut sont les suivants :
Système d’exploitation | Chemin |
---|---|
Linux/macOS | $HOME/.dotnet/tools |
Windows | %USERPROFILE%\.dotnet\tools |
Si vous essayez d’exécuter un outil global, vérifiez que la variable d’environnement PATH
sur votre ordinateur contient le chemin d’accès où vous avez installé l’outil global et que l’exécutable se trouve dans ce chemin.
L’interface CLI .NET tente d’ajouter l’emplacement par défaut à la variable d’environnement PATH lors de sa première utilisation. Toutefois, il existe certains scénarios où l’emplacement peut ne pas être ajouté automatiquement à PATH :
- Si vous utilisez Linux et que vous avez installé le Kit de développement logiciel (SDK) .NET à l'aide de fichiers .tar.gz plutôt que d'utiliser apt-get ou rpm.
- Si vous utilisez macOS 10.15 « Catalina » ou version ultérieure.
- Si vous utilisez macOS 10.14 « Mojave » ou versions antérieures, et que vous avez installé le Kit de développement logiciel (SDK) .NET à l’aide de .tar.gz fichiers et non .pkg.
- Si vous avez installé le Kit de développement logiciel (SDK) .NET Core 3.0 et que vous avez défini la variable d’environnement
DOTNET_ADD_GLOBAL_TOOLS_TO_PATH
surfalse
. - Si vous avez installé le Kit de développement logiciel (SDK) .NET Core 2.2 ou versions antérieures, et que vous avez défini la variable d’environnement
DOTNET_SKIP_FIRST_TIME_EXPERIENCE
surtrue
.
Dans ces scénarios ou si vous avez spécifié l’option --tool-path
lors de l’installation d’un outil dotnet, la variable d’environnement PATH
sur votre ordinateur ne contient pas automatiquement le chemin d’accès où vous avez installé l’outil global. Dans ce cas, ajoutez l’emplacement de l’outil (par exemple, $HOME/.dotnet/tools
) à la variable d’environnement PATH
à l’aide de la méthode que votre interpréteur de commandes fournit pour mettre à jour des variables d’environnement. Pour plus d’informations, consultez les outils .NET .
Outils locaux
Si vous essayez d’exécuter un outil local, vérifiez qu’il existe un fichier manifeste appelé dotnet-tools.json dans le répertoire actif ou dans l’un de ses répertoires parents. Ce fichier peut également se trouver sous un dossier nommé .config n’importe où dans la hiérarchie des dossiers du projet, au lieu du dossier racine. Si dotnet-tools.json existe, ouvrez-le et recherchez l’outil que vous essayez d’exécuter. Si le fichier ne contient pas d’entrée pour "isRoot": true
, vérifiez également la hiérarchie de fichiers pour obtenir des fichiers manifestes d’outils supplémentaires.
Si vous essayez d’exécuter un outil .NET installé avec un chemin d’accès spécifié, vous devez inclure ce chemin lors de l’utilisation de l’outil. Voici un exemple d’utilisation d’un outil installé :
..\<toolDirectory>\dotnet-<toolName>
Runtime introuvable
Les outils .NET sont applications dépendantes du framework, ce qui signifie qu’ils s’appuient sur un runtime .NET installé sur votre ordinateur. Si le runtime attendu n’est pas trouvé, ils suivent les règles normales de restauration du runtime .NET, telles que :
- Une application est transférée vers la version corrective la plus élevée de la version principale et mineure spécifiée.
- S’il n’existe aucun runtime correspondant avec un numéro de version principale et secondaire correspondant, la prochaine version mineure supérieure est utilisée.
- Les mises à jour ne se produisent pas entre les versions préliminaires de l'environnement d'exécution ou entre les versions préliminaires et les versions finales. Par conséquent, les outils .NET créés à l’aide de versions préliminaires doivent être reconstruits et republiés par l’auteur et réinstallés.
Le roll-forward ne se produit pas par défaut dans deux scénarios courants :
- Seules les versions inférieures du runtime sont disponibles. La restauration par progression sélectionne uniquement les versions ultérieures du runtime.
- Seules les versions principales supérieures du runtime sont disponibles. La restauration par progression ne franchit pas les limites des versions majeures.
Si une application ne trouve pas un runtime approprié, elle ne parvient pas à s’exécuter et signale une erreur.
Vous pouvez déterminer quels runtimes .NET sont installés sur votre ordinateur à l’aide de l’une des commandes suivantes :
dotnet --list-runtimes
dotnet --info
Si vous pensez que l’outil doit prendre en charge la version du runtime que vous avez actuellement installée, vous pouvez contacter l’auteur de l’outil et voir s’il peut mettre à jour le numéro de version ou multi-cible. Une fois qu’ils ont recompilé et republié leur package d’outils sur NuGet avec un numéro de version mis à jour, vous pouvez mettre à jour votre copie. Bien que cela ne se produise pas, la solution la plus rapide consiste à installer une version du runtime qui fonctionne avec l’outil que vous essayez d’exécuter. Pour télécharger une version spécifique du runtime .NET, visitez la page de téléchargement .NET.
Si vous installez le Kit de développement logiciel (SDK) .NET à un emplacement autre que celui par défaut, vous devez définir la variable d’environnement DOTNET_ROOT
sur le répertoire qui contient l’exécutable dotnet
.
Échec de l’installation de l’outil .NET
Il existe plusieurs raisons pour lesquelles l’installation d’un outil .NET global ou local peut échouer. Lorsque l’installation de l’outil échoue, un message semblable à celui suivant s’affiche :
Tool '{0}' failed to install. This failure may have been caused by:
* You are attempting to install a preview release and did not use the --version option to specify the version.
* A package by this name was found, but it was not a .NET tool.
* The required NuGet feed cannot be accessed, perhaps because of an Internet connection problem.
* You mistyped the name of the tool.
For more reasons, including package naming enforcement, visit https://aka.ms/failure-installing-tool
Pour diagnostiquer ces échecs, les messages NuGet sont affichés directement à l’utilisateur, ainsi que le message précédent. Le message NuGet peut vous aider à identifier le problème.
- Application de l’affectation de noms de package
- Versions préliminaires
- Package n’est pas un outil .NET
- flux NuGet n’est pas accessible
- Identifiant de paquet incorrect
- 401 (non autorisé)
Application de l’affectation de noms de package
Microsoft a modifié ses instructions sur l'identifiant de package pour les outils, ce qui fait qu'un certain nombre d'outils ne sont pas trouvés sous le nom prévu. Les nouvelles consignes sont que tous les outils Microsoft doivent être précédés de « Microsoft ». Ce préfixe est réservé et ne peut être utilisé que pour les packages signés par un certificat autorisé par Microsoft.
Pendant la transition, certains outils Microsoft auront l’ancienne forme de l’ID de package, tandis que d’autres auront le nouveau formulaire :
dotnet tool install -g Microsoft.<toolName>
dotnet tool install -g <toolName>
À mesure que les ID de package sont mis à jour, vous devez passer au nouvel ID de package pour obtenir les dernières mises à jour. Les packages portant le nom de l’outil simplifié seront déconseillés.
Versions précommerciales
- Vous tentez d’installer une préversion et n’avez pas utilisé l’option
--version
pour spécifier la version.
Les outils .NET en préversion doivent être spécifiés avec une partie du nom pour indiquer qu’ils sont en préversion. Vous n'avez pas besoin d'inclure l'intégralité de l'aperçu. En supposant que les numéros de version sont au format attendu, vous pouvez utiliser quelque chose comme l’exemple suivant :
dotnet tool install -g --version 1.1.0-pre <toolName>
Le package n’est pas un outil .NET
- Un package NuGet de ce nom a été trouvé, mais il n’était pas un outil .NET.
Si vous essayez d’installer un package NuGet qui est un package NuGet standard et non un outil .NET, vous verrez une erreur similaire à ce qui suit :
NU1212 : Combinaison de package de projet non valide pour
<toolName>
. Le style de projet DotnetToolReference ne peut contenir que des références du type DotnetTool.
Le flux NuGet n’est pas accessible
- Le flux NuGet requis n’est pas accessible, peut-être en raison d’un problème de connexion Internet.
L’installation de l’outil nécessite l’accès au flux NuGet qui contient le package d’outils. Elle échoue si le flux n’est pas disponible. Vous pouvez modifier des flux avec nuget.config
, demander un fichier nuget.config
spécifique ou spécifier des flux supplémentaires avec le commutateur --add-source
. Par défaut, NuGet génère une erreur pour tout flux qui ne peut pas se connecter. L’indicateur --ignore-failed-sources
peut ignorer ces sources non accessibles.
ID de paquet incorrect
- Vous avez mal tapé le nom de l’outil.
Une raison courante de l’échec est que le nom de l’outil n’est pas correct. Cela peut se produire en raison d'une mauvaise saisie, ou parce que l'outil a été déplacé ou est devenu obsolète. Pour les outils sur NuGet.org, une façon de vous assurer que le nom est correct consiste à rechercher l’outil à NuGet.org et à copier la commande d’installation.
401 (non autorisé)
Il est probable que vous avez spécifié un autre flux NuGet et que ce flux nécessite l’authentification. Il existe plusieurs façons de résoudre ce problème :
Ajoutez le paramètre
--ignore-failed-sources
pour contourner l’erreur du flux privé et utiliser le flux Microsoft public.Si vous installez un outil à partir du flux NuGet Microsoft, votre flux personnalisé retourne cette erreur avant que le flux NuGet de Microsoft retourne un résultat. L’erreur met fin à la demande, annulant toute autre demande de flux en attente, qui peut être le flux NuGet de Microsoft. L’ajout de l’option
--ignore-failed-sources
provoque le traitement de cette erreur comme un avertissement et permet à d’autres flux de traiter la requête.dotnet tool install -g --ignore-failed-sources <toolName>
Forcez le flux NuGet de Microsoft avec le paramètre
--add-source
.Il est possible que le fichier de configuration NuGet global ou local manque le flux NuGet Microsoft public. Utilisez une combinaison des paramètres
--add-source
et--ignore-failed-sources
pour éviter le flux erroné et compter sur le flux Microsoft public.dotnet tool install -g --add-source 'https://api.nuget.org/v3/index.json' --ignore-failed-sources <toolName>
Utilisez une configuration NuGet personnalisée,
--configfile <FILE>
paramètre.Créez un fichier nuget.config local avec uniquement le flux NuGet Microsoft public et référencez-le avec le paramètre
--configfile
:dotnet tool install -g --configfile "./nuget.config" <toolName>
Voici un exemple de fichier de configuration :
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> </packageSources> </configuration>
Pour plus d'informations, consultez la référence nuget.config.
Ajoutez les informations d’identification requises au fichier de configuration.
Si vous savez que le package existe dans le flux configuré, fournissez les informations d’identification de connexion dans le fichier de configuration NuGet. Pour plus d'informations sur les informations d'identification dans un fichier de configuration nuget, consultez la section packageSourceCredentials de la référence nuget.config.