web-dev-qa-db-fra.com

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

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

Je reçois le message d'erreur suivant lorsque j'essaie dotnet run:

Impossible de trouver une 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 échec de la restauration - Exécution de "restauration de réseau"
  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 s'être terminé avec succès.

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

149
Blake Mumford

J'aurais dû faire exactement ce que le message d'erreur a dit. Lors de la migration depuis RC1, je ne savais pas 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 prêt à partir.


Mis à jour le 27 février 2017

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

Si, toutefois, vous choisissez de déployer votre application à l'aide de Self-contained Deployment (SCD), vous devrez spécifier toutes les durées d'exécution de votre application dans votre fichier .csproj.

Vous trouverez ci-dessous un exemple de fichier .csproj pour une application utilisant 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.

290
Blake Mumford

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 une PCL qui cible netstandard 1.4 si vous ne voulez pas spécifier chaque exécution, il suffit de changer le balisage de dépendance pour Microsoft.NETCore.App comme suit:

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

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: Je peux maintenant construire à nouveau mais pas "exécuter" le site Web.

Vous devez vous assurer que vous avez également le runtime et sdk:

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

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

34
juFo

J'ai reçu cette erreur parce que j'ai utilisé le gestionnaire de packages NuGet incroyablement défectueux de 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!

20
NathanAldenSr

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ème, https://docs.Microsoft.com/en-us/dotnet/articles/core/rid-catalog

Vous verrez que vous pouvez créer une version entièrement portable en utilisant 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 de la structure".

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

ou vous pouvez construire 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 l'ajouter comme nouvel élément de niveau racine

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

Pour cibler plusieurs cibles, vous devez fournir des noms de plate-forme appelés "IDentifiants .NET Core Runtime (RID)". Vous trouverez une liste de ces identifiants au lien ci-dessus. Il comprend de nombreuses variantes de Windows, Linux et OS X.

Pour une bonne vue d'ensemble 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 de la structure

Comme son nom l'indique, le déploiement dépendant de la structure (FDD) repose sur une version partagée de l'ensemble de systèmes .NET Core pour être présente sur le système cible. Parce 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 extérieures aux bibliothèques .NET Core. Les FDD contiennent des fichiers .dll pouvant ê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 dépend pas de la présence de composants partagés sur le système cible. Tous les composants, y compris les bibliothèques .NET Core et le runtime .NET Core, sont inclus dans 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 du .NET Core Host spécifique à la plate-forme, et un fichier .dll (tel que app.dll), qui est: l'application réelle.

15
BigTFromAZ

Dans mon cas, je venais de mettre à jour tous les packages de nuget vers leurs dernières versions et nuget a changé ma référence de 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 ....

9

si vous exécutez un nouveau fichier .NET et examinez le projet de sortie json, vous verrez que les monikers ont changé.

Apportez les modifications à votre fichier project.json comme suit:

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

J'ai trouvé que vous aviez besoin des éléments suivants 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"
      ]
    }
  },

Runtime

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

Vous voudrez peut-être ajouter des environnements 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 mes affaires se cassent, je crée parfois une application ASP.NET Core par défaut, soit le site Web, soit une 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 je pensais écrire ceci au cas où quelqu'un voudrait séparer la logique du format de modèle général utilisé par ASP.NET Core.

0
hlyates

Sous Windows 7 avec VS 2015, après la mise à jour vers netcore 1.1.2, la solution 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 alto.

0
Santiago Suarez

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

0
Technorider