No se puede encontrar el objetivo de tiempo de ejecución para framework .NETCoreApp = v1 compatible con uno de los tiempos de ejecución de destino

149

Estoy tratando de migrar un proyecto Asp.Net Core RC1 a RC2 y he seguido esta documentación y también he seguido las instrucciones para la migración de DNX a .NET CLI.

Recibo el siguiente error cuando lo intento dotnet run:

No se puede encontrar el objetivo de tiempo de ejecución para el marco '.NETCoreAPP, Versión = v1.0' compatible con uno de los tiempos de ejecución de destino: 'win10-x64, win81-x64, win8-x64, win7-x64'. Posibles Causas:

  1. El proyecto no se ha restaurado o la restauración ha fallado: ejecute 'dotnet restore'
  2. El proyecto no enumera uno de 'win10-x64, win81-x64, win7-x64' en los 'tiempos de ejecución'

He corrido dotnet restorey parece que se ha completado con éxito.

He actualizado todos los paquetes relevantes a RC2.

Blake Mumford
fuente

Respuestas:

290

Debería haber hecho exactamente lo que decía el mensaje de error. Al migrar desde RC1, no me di cuenta de que tenía que especificar una runtimessección en mi project.jsonarchivo.

En mi project.jsonagregué la siguiente sección:

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

Y estaba listo para irme.


Actualización 27 de febrero de 2017

Las nuevas plantillas de proyecto en Visual Studio 2017 RC ya no requieren que se especifiquen los tiempos de ejecución (en project.jsono .csproj) por adelantado si elige implementar su aplicación como Framework Dependent Deployment(FDD).

Sin embargo, si elige implementar su aplicación usando Self-contained Deployment(SCD), deberá especificar todos los tiempos de ejecución en los que desea que su aplicación se ejecute por adelantado en su .csprojarchivo.

A continuación se muestra un ejemplo de un .csprojarchivo para una aplicación que utiliza el método de implementación 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>

Consulte este enlace para obtener más información, que incluye una descripción detallada de ambos tipos de opciones de implementación, así como sus beneficios y desventajas.

Blake Mumford
fuente
42
Creé un nuevo proyecto en VS 2015 Update 3. Y todavía me faltaba esta sección.
Edward Olamisan
77
Creo que no siempre es necesario agregar esta configuración. La documentación dice: "Si usted es una biblioteca de clases portátil que puede ejecutarse en cualquier tiempo de ejecución, no necesita especificar un tiempo de ejecución". - Eso es cierto para la mayoría de mis proyectos, pero este error apareció cuando agregué un proyecto de Entity Framework Core a mi solución. Creo que EF Core, al menos en su estado RC2, tiene una limitación sobre las plataformas en las que puede ejecutarse, por lo tanto, los proyectos que hacen referencia a él, podrían necesitar cumplir con esa configuración. Pero solo estoy adivinando. La documentación es realmente confusa en este momento.
Bernhard Koenig
77
Ni siquiera necesité esto en una nueva plantilla 1.0 Core VS2015, actualizada a 1.0.1 y obtuve el error anterior, gracias por la solución.
Steve McNiven-Scott
1
@ SteveMcNiven-Scott: lo mismo aquí. También tuve que agregar otra línea en "tiempos de ejecución" para que se restaurara y compilara en Ubuntu Server: "ubuntu.16.04-x64". YMMV, pero el error debe señalar la plataforma que falta y necesitaría agregar.
Zar Bomba
55
El mensaje de error no menciona "project.json". ¿Cómo se supone que la gente debe adivinar?
útilAbe
76

Recibí este error después de actualizar la plantilla central VS2015 a 1.0.1. Fue porque tengo un PCL que se dirige netstandard 1.4 si no quieres tener que especificar cada tiempo de ejecución, solo cambia el marcado de dependencia para Microsoft.NETCore.Appesto:

"Microsoft.NETCore.App": {
 "type": "platform",
 "version": "1.0.1"
}
Mike_G
fuente
1
El marcado anterior solucionó mi error de compilación, pero IIS Express no comenzaría después de eso. Cambiar "versión": "1.0.1" a "versión": "1.0.0" resolvió el problema de IIS.
Ross
@Ross actualiza la sección de herramientas en project.json para que coincida con la versión NETCore.App
DalSoft
En este caso "herramientas": {"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"},
DalSoft
1
@DalSoft: Sí, actualicé mi VS 2015 hace unas semanas con los últimos parches, incluidos IISIntegration.Tools, y resolvió el problema Microsoft.NETCore.App: 1.0.1 para mí.
Ross
1
@usefulBee Portable Class Library
Mike_G
35

en project.json cambié esto (tipo agregado):

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

Ahora puedo construir de nuevo :-)

actualización: ahora puedo construir de nuevo pero no "ejecutar" el sitio web.

Debe asegurarse de tener el tiempo de ejecución y SDK también:

*) Las herramientas de Visual Studio incluyen .NET Core 1.0.1. Para agregar compatibilidad con .NET Core 1.1, también debe instalar el tiempo de ejecución de .NET Core 1.1.

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

juFo
fuente
1
Parece que no puede ejecutar el sitio web porque necesita instalar .NET Core 1.1 SDK
Victor Sharovatov
y, a veces, también es necesario reinstalar Runtime.
juFo
Esto me ayudó. ¡Gracias! Comentando "Microsoft.NETCore.App" directamente desde las dependencias en el project.json y cambiándolo a "frameworks": {"netcoreapp1.1": {"dependencias": {"Microsoft.NETCore.App": {" versión ":" 1.1.0 "," tipo ":" plataforma "}}}},
neodimio
1
Gracias. Estos 2 simples pasos resolvieron el problema. Esperemos que MS lo haga más amigable para los desarrolladores en el futuro cercano.
EvZ
20

Recibí este error porque utilicé el NuGet Package Manager increíblemente roto en Visual Studio 2015 para actualizar mis dependencias project.json. Resultó esto:

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

dentro de esto:

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

¡Adiós, definición de plataforma!

NathanAldenSr
fuente
15

Si lees estos dos enlaces:

Primero, https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/using-with-xplat-cli

y

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

Verá que puede crear una versión completamente portátil utilizando el siguiente fragmento en el elemento raíz de dependencias en project.json. No es necesario especificar tiempos de ejecución ya que este es un tiempo de ejecución de nivel CORE que debe ser independiente de la plataforma o conocido como "dependiente del marco"

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

o puede construir para múltiples plataformas específicas ("aplicaciones independientes") eliminando el tipo: elemento de plataforma como este:

Agregue esto al elemento raíz de dependencias en project.json

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

y agregue esto como un nuevo elemento de nivel raíz

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

El objetivo múltiple requiere que proporcione nombres de plataforma conocidos como ".NET Core Runtime IDentifiers (RID)". Puede encontrar una lista de estos en el segundo enlace de arriba. Incluye muchos sabores de Windows, Linux y OS X.

Para obtener una buena visión general de las diversas opciones de implementación, también puede leer esta página:

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

Desde el enlace de arriba:

Puede crear dos tipos de implementaciones para aplicaciones .NET Core:

Despliegue dependiente del marco

Como su nombre lo indica, la implementación dependiente del marco (FDD) se basa en una versión compartida de todo el sistema de .NET Core para estar presente en el sistema de destino. Como .NET Core ya está presente, su aplicación también es portátil entre instalaciones de .NET Core. Su aplicación contiene solo su propio código y las dependencias de terceros que están fuera de las bibliotecas .NET Core. Los FDD contienen archivos .dll que se pueden iniciar utilizando la utilidad dotnet desde la línea de comandos. Por ejemplo, dotnet app.dll ejecuta una aplicación llamada app.

Despliegue autónomo

A diferencia de FDD, una implementación autónoma (SCD) no depende de ningún componente compartido para estar presente en el sistema de destino. Todos los componentes, incluidas las bibliotecas .NET Core y el tiempo de ejecución .NET Core, se incluyen con la aplicación y están aislados de otras aplicaciones .NET Core. Los SCD incluyen un ejecutable (como app.exe en plataformas Windows para una aplicación llamada app), que es una versión renombrada del host .NET Core específico de la plataforma, y ​​un archivo .dll (como app.dll), que es La aplicación real.

BigTFromAZ
fuente
9

En mi caso, acababa de actualizar todos los paquetes nuget a sus últimas versiones y nuget cambió mi referencia de paquete 'Microsoft.NETCore.App' a lo siguiente:

"Microsoft.NETCore.App": "1.1.0"

Lo cambié a la siguiente forma y todo funcionó bien:

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

Adiós 3 horas de mi vida ...

Alex Hope O'Connor
fuente
4

si ejecuta un dotnet nuevo y mira el proyecto de salida json, verá que los apodos han cambiado.

Realice los cambios en su project.json de la siguiente manera:

"dependencies": {},
   "frameworks": {
     "netcoreapp1.0": {
        "dependencies": {
         "Microsoft.NETCore.App": {
         "type": "platform",
         "version": "1.0.1"
         }
    },
      "imports": "dnxcore50"
    }
  }
John Banks
fuente
Para mí esta es la mejor solución. .NET Core está en un estado de cambio y las cosas siguen cambiando. Usando la CLI para generarle un project.json para corregir los cambios en su project.json que NuGet PM parece no poder mantener constante y actualizado.
James B
0

Encontré un enlace útil del comentario de svick en la siguiente página: https://github.com/dotnet/cli/issues/2442

Technorider
fuente
1
Aunque su respuesta es 100% correcta, también podría volverse 100% inútil si ese enlace se mueve, cambia, fusiona en otro o el sitio principal simplemente desaparece ... :-( Por lo tanto, edite su respuesta y copie la información relevante pasos desde el enlace a su respuesta, lo que garantiza su respuesta durante el 100% de la vida útil de este sitio! ;-) Siempre puede dejar el enlace en la parte inferior de su respuesta como fuente de su material ...
Pato Donald
0

Descubrí que necesitas lo siguiente en project.json. Esto es lo que se requería para corregir mi error:

Dependencias

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

Marcos

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

Tiempo de ejecución

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

Es posible que desee agregar tiempos de ejecución si planea publicar en IIS. Por favor, vea algo de la siguiente manera:

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

Aquí hay un consejo general que me ha funcionado bien. Cuando mis cosas se rompen, a veces creo una aplicación ASP.NET Core predeterminada, ya sea el sitio web o una API web vacía para ver las dependencias en project.json y en otros lugares. A menudo puedes atrapar muchas cosas de esa manera. Las respuestas anteriores son acertadas, pero pensé que escribiría esto aquí en caso de que alguien quisiera separar más la lógica en el formato de plantilla general que usa ASP.NET Core.

hlyates
fuente
0

En Windows 7 con VS 2015, la solución después de actualizar a netcore 1.1.2 fue cambiar el archivo project.json de la siguiente manera:

{
"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
  }                             //
}

Después de cambiar esto, las dependencias se actualizarán y violarán.

Santiago Suárez
fuente