Impossible de trouver la cible d’exécution pour le framework .NETCoreApp = v1 compatible avec l’un des environnements d’exécution cibles

J’essaie de migrer un projet Asp.Net Core RC1 vers RC2 et j’ai suivi cette documentation et j’ai également suivi les instructions pour la migration de DNX vers .NET CLI.

dotnet run erreur suivante lorsque j’essaie de dotnet run :

Impossible de trouver la cible d’exécution pour le framework ‘.NETCoreAPP, Version = v1.0’ compatible avec l’un des environnements d’exécution cibles: ‘win10-x64, win81-x64, win8-x64, win7-x64’. Causes possibles:

  1. Le projet n’a pas été restauré ou la restauration a échoué -run ‘dotnet restore’
  2. Le projet ne répertorie pas l’un des «win10-x64, win81-x64, win7-x64» dans les «runtimes»

J’ai exécuté dotnet restore et il semble avoir terminé avec succès.

J’ai mis à jour tous les paquets pertinents pour RC2.

J’aurais dû faire exactement ce que le message d’erreur disait. Lors de la migration depuis RC1, je n’avais pas réalisé que je devais spécifier une section runtimes dans mon fichier project.json .

Dans mon project.json j’ai ajouté la section suivante:

 "runtimes": { "win10-x64": { } } 

Et j’étais bon pour y aller.


Mise à jour 27 février 2017

Les nouveaux modèles de projet dans Visual Studio 2017 RC ne nécessitent plus que des temps d’exécution soient spécifiés (dans project.json ou .csproj ) si vous choisissez de déployer votre application en tant que Framework Dependent Deployment .

Si, toutefois, vous choisissez de déployer votre application à l’aide du Self-contained Deployment (SCD), vous devrez spécifier toutes les heures d’exécution que votre application doit exécuter à l’avance dans votre fichier .csproj .

Vous trouverez ci-dessous un exemple de fichier .csproj pour une application utilisant la méthode de déploiement SCD:

   Exe netcoreapp1.0 1.0.0 Portable win10-x64;osx.10.11-x64      

S’il vous plaît voir ce lien pour plus d’informations, qui comprend une description approfondie des deux types d’options de déploiement, ainsi que leurs avantages et inconvénients.

J’ai reçu cette erreur après avoir mis à jour le modèle de base VS2015 à 1.0.1. C’était parce que j’ai une PCL qui cible netstandard 1.4 si vous ne voulez pas avoir à spécifier chaque runtime, changez simplement le balisage de dépendance pour Microsoft.NETCore.App à ceci:

 "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" } 

dans project.json j’ai changé cela (type ajouté):

 //"Microsoft.NETCore.App": "1.1.0", "Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" }, 

Maintenant je peux reconstruire 🙂

mise à jour: maintenant je peux reconstruire mais pas “exécuter” le site.

Vous devez vous assurer que vous disposez du runtime et du sdk également:

*) Les outils Visual Studio incluent .NET Core 1.0.1. Pour append la prise en charge de .NET Core 1.1, vous devez également installer le runtime .NET Core 1.1.

https://www.microsoft.com/net/download/core#/current

J’ai reçu cette erreur car j’ai utilisé le gestionnaire de packages NuGet incroyablement cassé dans Visual Studio 2015 pour mettre à jour mes dépendances project.json. Cela a tourné ceci:

 "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" } } } } 

dans ceci:

 "dependencies": { "Microsoft.NETCore.App": "1.1.0" }, "frameworks": { "netcoreapp1.0": {} } 

Au revoir, définition de la plate-forme!

Si vous lisez ces deux liens:

Tout d’abord, https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli

et

Deuxièmement, https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

Vous verrez que vous pouvez construire une version complètement portable en utilisant l’extrait suivant dans l’élément racine des dépendances dans project.json. Il n’est pas nécessaire de spécifier des environnements d’exécution, car il s’agit d’un environnement d’exécution de niveau CORE qui doit être indépendant de la plate-forme ou appelé “dépendant du cadre”

 "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" } 

ou vous pouvez créer pour plusieurs plates-formes ciblées (“applications autonomes”) en supprimant l’élément type: platform comme ceci:

Ajoutez ceci à l’élément racine des dépendances dans project.json

 "Microsoft.NETCore.App": { "version": "1.0.1" } 

et ajoutez ceci comme nouvel élément de niveau racine

 "runtimes": { "win10-x64": {}, /* one or more RIDs */ "osx.10.10-x64": {} }, 

Plusieurs cibles ciblées nécessitent que vous fournissiez des noms de plate-forme connus sous le nom de “.ID Core Runtime IDentifiers (RID)”. Vous en trouverez une liste au deuxième lien ci-dessus. Il comprend de nombreuses variantes de Windows, Linux et OS X.

Pour un bon aperçu des différents choix de déploiement, vous pouvez également lire cette page:

https://docs.microsoft.com/en-us/dotnet/articles/core/deploying/index

À partir du lien ci-dessus:

Vous pouvez créer deux types de déploiements pour les applications .NET Core:

Déploiement dépendant du cadre

Comme son nom l’indique, le déploiement dépendant du cadre (FDD) dépend d’une version partagée de .NET Core à l’échelle du système pour être présent sur le système cible. Comme .NET Core est déjà présent, votre application est également portable entre les installations de .NET Core. Votre application ne contient que son propre code et toutes les dépendances tierces situées en dehors des bibliothèques .NET Core. Les FDD contiennent des fichiers .dll qui peuvent être lancés à l’aide de l’utilitaire dotnet à partir de la ligne de commande. Par exemple, dotnet app.dll exécute une application nommée app.

Déploiement autonome

Contrairement au FDD, un déploiement autonome (SCD) ne repose sur aucun composant partagé présent sur le système cible. Tous les composants, y compris les bibliothèques .NET Core et l’environnement d’exécution .NET Core, sont inclus avec l’application et sont isolés des autres applications .NET Core. Les SCD incluent un exécutable (tel que app.exe sur les plates-formes Windows pour une application nommée app), qui est une version renommée de l’hôte .NET Core spécifique à la plate-forme et un fichier .dll (tel que app.dll), qui est l’application réelle.

Dans mon cas, je venais de mettre à jour tous les paquets nuget vers leurs versions les plus récentes et nuget changeait ma référence de package «Microsoft.NETCore.App» comme suit:

 "Microsoft.NETCore.App": "1.1.0" 

Je suis revenu à la forme suivante et tout s’est bien passé:

 "Microsoft.NETCore.App": { "version": "1.1.0", "type": "platform" } 

Au revoir 3 heures de ma vie ….

Si vous exécutez un nouveau dotnet et regardez le projet de sortie json, vous verrez que les monikers ont changé.

Apportez les modifications à votre project.json comme suit:

 "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.1" } }, "imports": "dnxcore50" } } 

J’ai trouvé un lien utile du commentaire de svick sous la page suivante: https://github.com/dotnet/cli/issues/2442

J’ai trouvé que vous aviez besoin de ce qui suit dans project.json. Voici ce qui était nécessaire pour corriger mon erreur:

Les dépendances

 "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.1", "type": "platform" }, } 

Cadres

 "frameworks": { "netcoreapp1.0": { "imports": [ "dotnet5.6", "portable-net45+win8" ] } }, 

Runtime

  "runtimeOptions": { "configProperties": { "System.GC.Server": true } }, 

Vous souhaiterez peut-être append des temps d’exécution si vous envisagez de publier sur IIS. S’il vous plaît voir quelque chose comme suit:

  "runtimes": { "win10-x64": {} }, 

Voici un conseil général qui a bien fonctionné pour moi. Lorsque mon matériel se brise, je crée parfois une application ASP.NET Core par défaut, soit le site Web, soit une application Web vide pour examiner les dépendances dans project.json et ailleurs. Vous pouvez souvent attraper beaucoup de choses de cette façon. Les réponses ci-dessus sont exactes, mais je pensais que j’écrirais ceci ici au cas où quelqu’un voudrait séparer davantage la logique du format général utilisé par ASP.NET Core.

Dans Windows 7 avec VS 2015, le soluiton après la mise à jour vers netcore 1.1.2 modifiait le fichier project.json comme suit:

 { "version": "1.0.0-*", "buildOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.App": "1.1.2" }, "frameworks": { "netcoreapp1.0": { "imports": "dnxcore50" //This line must disappear } }, "runtimes": { // "win7-x64": {} //Add this lines } // } 

Après avoir modifié cela, les dépendances seront mises à jour et alto.