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

149

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 DNX vers .NET CLI.

J'obtiens l'erreur suivante lorsque j'essaye 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 couru dotnet restoreet il semble s'être terminé avec succès.

J'ai mis à jour tous les packages pertinents vers RC2.

Blake Mumford
la source

Réponses:

290

J'aurais dû faire exactement ce que le message d'erreur disait. Lors de la migration depuis RC1, je ne savais pas que je devais spécifier une runtimessection dans mon project.jsondossier.

Dans mon project.jsonj'ai ajouté la section suivante:

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

Et j'étais prêt à partir.


Mise à jour du 27 février 2017

Les nouveaux modèles de projet dans Visual Studio 2017 RC ne nécessitent plus que les heures d'exécution soient spécifiées (dans project.jsonou .csproj) à l'avance si vous choisissez de déployer votre application en tant que Framework Dependent Deployment(FDD).

Si, cependant, vous choisissez de déployer votre application à l'aide de Self-contained Deployment(SCD), vous devrez spécifier toutes les heures d'exécution sur lesquelles vous souhaitez que votre application s'exécute à l'avance dans votre .csprojfichier.

Voici un exemple de .csprojfichier pour une application qui utilise la méthode de déploiement SCD:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.0</TargetFramework>
    <VersionPrefix>1.0.0</VersionPrefix>
    <DebugType>Portable</DebugType>
    <RuntimeIdentifiers>win10-x64;osx.10.11-x64</RuntimeIdentifiers>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
  </ItemGroup>
</Project>

Veuillez consulter ce lien pour plus d'informations, qui comprend une description détaillée des deux types d'options de déploiement, ainsi que de leurs avantages et inconvénients.

Blake Mumford
la source
42
J'ai créé un nouveau projet dans VS 2015 Update 3. Et cette section manquait toujours.
Edward Olamisan
7
Je pense qu'il n'est pas toujours nécessaire d'ajouter ce paramètre. La documentation dit: "Si vous êtes une bibliothèque de classes portable qui peut s'exécuter sur n'importe quel environnement d'exécution, vous n'avez pas besoin de spécifier un environnement d'exécution." - C'est vrai pour la plupart de mes projets, mais cette erreur est apparue lorsque j'ai ajouté un projet Entity Framework Core à ma solution. Je pense qu'EF Core - au moins dans son état RC2 - a une limitation sur les plates-formes sur lesquelles il peut fonctionner, par conséquent, les projets qui le référencent peuvent devoir se conformer à ces paramètres. Mais je ne fais que deviner. La documentation est vraiment déroutante à ce stade.
Bernhard Koenig
7
Je n'ai même pas eu besoin de cela sur un nouveau modèle 1.0 Core VS2015, mis à jour à 1.0.1 et obtenu l'erreur ci-dessus, merci pour le correctif!
Steve McNiven-Scott
1
@ SteveMcNiven-Scott - Même chose ici. J'ai également dû ajouter une autre ligne dans "runtimes" pour la restaurer et la construire sur Ubuntu Server: "ubuntu.16.04-x64". YMMV mais l'erreur doit indiquer la plate-forme qui vous manque et que vous devez ajouter.
Tsar Bomba
5
Le message d'erreur ne mentionne pas "project.json". Comment les gens sont censés deviner ??
utileBee
76

J'ai reçu cette erreur après la mise à jour du modèle principal VS2015 vers la version 1.0.1. C'est parce que j'ai un PCL qui cible netstandard 1.4 si vous ne voulez pas avoir à spécifier chaque exécution, changez simplement le balisage de dépendance pour Microsoft.NETCore.Appen ceci:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Mike_G
la source
1
Le balisage ci-dessus a corrigé mon erreur de compilation, mais IIS Express ne démarre pas après cela. Le changement de "version": "1.0.1" en "version": "1.0.0" a résolu le problème IIS.
Ross
@Ross met à jour la section des outils dans project.json pour qu'elle corresponde à la version NETCore.App
DalSoft
Dans ce cas "tools": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
DalSoft
1
@DalSoft - Oui, j'ai mis à jour mon VS 2015 il y a quelques semaines avec les derniers correctifs, y compris IISIntegration.Tools, et cela a résolu le problème Microsoft.NETCore.App: 1.0.1 pour moi.
Ross
1
@usefulBee Bibliothèque de classes portable
Mike_G
35

dans project.json j'ai changé ceci (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 Web.

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

*) Les outils Visual Studio incluent .NET Core 1.0.1. Pour ajouter 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

juFo
la source
1
Il semble que vous ne puissiez pas exécuter le site Web car vous devez installer le SDK .NET Core 1.1
Victor Sharovatov
et parfois la réinstallation du Runtime est également nécessaire, j'ai découvert.
juFo
Cela m'a aidé. Merci! Commenter "Microsoft.NETCore.App" directement à partir des dépendances dans project.json et le changer pour qu'il soit sous "frameworks": {"netcoreapp1.1": {"dependencies": {"Microsoft.NETCore.App": {" version ":" 1.1.0 "," type ":" platform "}}}},
néodyme
1
Je vous remercie. Ces 2 étapes simples ont résolu le problème. Espérons que MS le rendra plus convivial pour les développeurs dans un proche avenir.
EvZ
20

J'ai reçu cette erreur car j'ai utilisé le gestionnaire de package NuGet incroyablement cassé dans Visual Studio 2015 pour mettre à jour mes dépendances project.json. Cela a transformé 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": {}
}

Bye bye, définition de la plateforme!

NathanAldenSr
la source
15

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 créer une version complètement portable à l'aide de l'extrait de code suivant dans l'élément racine des dépendances dans project.json. Il n'est pas nécessaire de spécifier les 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 en tant que nouvel élément de niveau racine

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

Plusieurs cibles nécessitent que vous fournissiez des noms de plates-formes connus sous le nom de «IDentificateurs d'exécution .NET Core (RID)». Une liste de ceux-ci se trouve sur le deuxième lien ci-dessus. Il comprend de nombreuses versions de Windows, Linux et OS X.

Pour un bon aperçu des différentes options 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 framework

Comme son nom l'indique, le déploiement dépendant du framework (FDD) repose sur une version partagée à l'échelle du système de .NET Core pour être présente sur le système cible. Étant donné que .NET Core est déjà présent, votre application est également portable entre les installations de .NET Core. Votre application contient uniquement son propre code et toutes les dépendances tierces qui sont 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 à FDD, un déploiement autonome (SCD) ne repose sur aucun composant partagé pour être présent sur le système cible. Tous les composants, y compris les bibliothèques .NET Core et le runtime .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.

BigTFromAZ
la source
9

Dans mon cas, je venais de mettre à jour tous les packages nuget vers leurs dernières versions et nuget a changé la référence de mon package `` Microsoft.NETCore.App '' comme suit:

"Microsoft.NETCore.App": "1.1.0"

Je l'ai changé à la forme suivante et tout a bien fonctionné:

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

Au revoir 3 heures de ma vie ...

Alex Hope O'Connor
la source
4

si vous exécutez un dotnet new 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"
    }
  }
John Banks
la source
Pour moi, c'est la meilleure solution. .NET Core est en pleine mutation et les choses changent constamment. Utilisation de l'interface de ligne de commande pour vous générer un project.json pour corriger les modifications de votre project.json que NuGet PM ne semble pas rester cohérent et mis à jour.
James B
0

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

Technorider
la source
1
Bien que votre réponse soit correcte à 100%, elle pourrait également devenir 100% inutile si ce lien est déplacé, modifié, fusionné dans un autre ou si le site principal disparaît simplement ... :-( Par conséquent, veuillez modifier votre réponse et copier le lien correspondant. étapes du lien dans votre réponse, garantissant ainsi votre réponse pour 100% de la durée de vie de ce site! ;-) Vous pouvez toujours laisser le lien en bas de votre réponse comme source de votre matériel ...
Donald Duck
0

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

Dépendances

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

Cadres

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

Durée

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

Vous souhaiterez peut-être ajouter des environnements d'exécution si vous prévoyez de publier sur IIS. Veuillez voir quelque chose comme suit:

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

Voici une astuce générale qui a bien fonctionné pour moi. Lorsque mes affaires se cassent, je crée parfois une application ASP.NET Core par défaut, soit le site Web, soit l'API 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 parfaites, mais j'ai pensé que j'écrirais ceci ici au cas où quelqu'un voudrait séparer davantage la logique dans le format de modèle général utilisé par ASP.NET Core.

hlyates
la source
0

Dans Windows 7 avec VS 2015, la solution après la mise à jour vers netcore 1.1.2 changeait 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 changé cela, les dépendances seront mises à jour et viole.

Santiago Suarez
la source