Error al publicar un sitio ASP.NET Core 3.1 en Azure desde Visual Studio 2019

10

Tengo una aplicación ASP.NET Core 3.0 preexistente que se implementó correctamente en un Servicio de aplicaciones de Azure (usando el AspNetCoreModuleV2módulo). Después de actualizar la aplicación a (la versión de hoy) ASP.NET Core 3.1 , la aplicación se compila y ejecuta correctamente en mi versión local de IIS Express . Sin embargo, cuando intento publicar en el Servicio de aplicaciones de Azure usando (versión de hoy) de Visual Studio 16.4 , recibo el siguiente error:

El archivo de activos 'C: \ Project \ obj \ project.assets.json' no tiene un destino para '.NETCoreApp, Version = v3.0'. Asegúrese de que la restauración se haya ejecutado y que haya incluido 'netcoreapp3.0' en TargetFrameworks para su proyecto.

Notas

  • Todo <PackageReference>'s a Microsoft.AspNetCore, Microsoft.EntityFrameworkCorey Microsoft.Extensionsse han actualizado para3.1.0
  • He limpiado mi solución e incluso he nukeado mi objcarpeta para asegurarme de que no haya referencias persistentes.
  • Este error se genera a partir de la 3.1.100versión de Microsoft.PackageDependencyResolution.targets.

Entiendo que algo todavía está pendiente de las dependencias de .NET Core 3.0 . Pero no está claro por qué eso solo causa problemas durante la implementación. ¿ Azure App Service aún no está listo para .NET Core 3.1 ? ¿O es un problema con los objetivos de resolución de dependencia?

Jeremy Caney
fuente
Gracias @Panagiotis Kanavos por etiquetar esto asp.net-core-3.1. Me faltaba la reputación necesaria para crear una nueva etiqueta.
Jeremy Caney
Obviamente, mi próximo paso será comenzar con una nueva plantilla de proyecto ASP.NET Core 3.1 , intentar implementar en un nuevo servicio de aplicación de Azure y luego reintroducir las dependencias hasta que pueda reproducir el problema. No tendré tiempo para hacerlo hasta más adelante esta semana. Hasta entonces, esperaba que alguien más pudiera tener alguna idea de este tipo de error, o haber encontrado una solución por sí mismos.
Jeremy Caney
Los documentos muestran cómo seleccionar explícitamente la versión de .NET Core SDK . ¿Has intentado eso? ¿El SDK 3.1 aparece en la lista?
Panagiotis Kanavos
@PanagiotisKanavos: este proyecto aún no se ha publicado con Azure Pipelines . Dicho esto, no me recuerdan que hay también un <TargetFramework>ajuste en el pubxmlperfil que Visual Studio se basa en que me espaciados en. ¡Uy! Cambiar eso para netcoreapp3.1que coincida con el csprojobjetivo resuelve el problema inmediato. (Esto presenta un nuevo problema con el Servicio de aplicaciones de Azure en sí mismo tropezando con el objetivo, pero eso probablemente se puede resolver mediante una implementación independiente, similar al enlace que proporcionó). ¡Gracias por señalarme en la dirección correcta!
Jeremy Caney
1
Bueno, gracias a Dios por encontrar esta pregunta (y respuesta). Estoy empezando a sentirme bastante frustrado con la adopción de cambios de EM de vanguardia (por recomendación y aliento) solo para seguir encontrándome con problemas como este.
Frank

Respuestas:

14

El problema inmediato, como se identificó en la pregunta original, tiene que ver con que hay dos lugares donde <TargetFramework>se establece:

  1. El archivo del proyecto (p. Ej. csproj)
  2. El perfil de publicación (es decir, pubxml)

El <TargetFramework>debe ser actualizado en ambos lugares, y deben coincidir exactamente . De lo contrario, la publicación no podrá encontrar sus objetivos en el project.assets.jsonarchivo, que se basa <TargetFramework>en el csjprojarchivo.

Nota: Puede esperar que elpubxmlarchivo difiera al<TargetFramework>conjunto en elcsprojarchivo, pero ese no esel caso.

Editor de texto

Para realizar esta modificación a través de un editor de texto,

  1. Abre la ~/Properties/PublishProfilescarpeta
  2. Abra el *.pubxmlque desea editar.
  3. Modifique el valor de <TargetFramework>a netcoreapp3.1:
<TargetFramework>netcoreapp3.1</TargetFramework>

Visual Studio 2019

Para realizar esta modificación a través del IDE de Visual Studio 2019 ,

  1. Haga clic en el ícono de ajustes en la barra de herramientas Publicación de Web One Click (está a la derecha del ícono de publicación).
  2. Suponiendo que Target Framework no esté configurado en netcoreapp3.1, haga clic en el icono de edición al lado.
  3. Asegúrese de que el Marco de destino esté configurado en netcoreapp3.1.
  4. Haz clic en Guardar .

Advertencia: cuando use el IDE, puede encontrarse con un problema aquí. Al editar el perfil, probablemente verá el nuevo valor de su archivo de proyecto (es decir,netcoreapp3.1) ya seleccionado. Sin embargo,cuando hace clic en Guardar , volverá alvalor original (por ejemplo,netcoreapp3.0en mi caso). Esto se debe a que en realidad no cambió el valor en la interfaz, que Visual Studio confunde porque no hay un cambio en losvalores subyacentes . Si alterna temporalmente otro valor (por ejemplo, Configuración ), Visual Studio reconocerá que se ha producido un cambio y ambos valores se actualizarán en el*.pubxmlarchivo.

Gracias, nuevamente, a @PanagiotisKanavos por señalarme en la dirección correcta (ver comentarios en el hilo original).

Jeremy Caney
fuente
¡Gracias por publicar una solución! Estaba luchando con esto cuando intenté publicar anoche y simplemente no tenía ningún sentido. En el asistente de publicación siempre tenía 3.1 seleccionado como destino, así que pensé que estaba bien, pero una vez que abrí el pubxarchivo como me explicaste, todavía estaba en 3.0. Muy frustrante. Honestamente, no he tenido nada más que extraños, oscuros y completamente errores y problemas desde que se lanzaron VS 16.3 y .NET Core 3.0. ¡Gracias de nuevo!
Gup3rSuR4c
Idk si también está obteniendo esto, pero es bastante encantador cómo cuando le dice que publique como dependiente del marco, decide publicar todo el marco junto con él. Una publicación que debería
durar
FYI: desde que publiqué esto originalmente, Microsoft ha actualizado los Servicios de aplicaciones de Azure para proporcionar soporte nativo para .NET Core 3.1 . Dado eso, he eliminado la advertencia sobre el HTTP Error 500.30 - ANCM In-Process Start Failuremensaje de mi mensaje original. Anteriormente, esto requería publicar una distribución totalmente autónoma de su aplicación. (Dicho esto, generalmente hay un retraso de 2-3 días entre una nueva versión de .NET Core y su integración en el entorno de Azure App Service , por lo que es útil tenerlo en cuenta en futuras actualizaciones).
Jeremy Caney
1
Agradable, solo había actualizado la versión del marco en las propiedades del proyecto y ni siquiera me había pasado por la cabeza el archivo .pubxml. Esto estaba causando que mi publicación se bloqueara, después de actualizar .pubxml a "netcoreapp3.1" funcionó bien. Gracias
demoncodemonkey
2

Abra la carpeta del proyecto;

  • Navegue a la carpeta Propiedades >> PublishProfiles
  • Abra el archivo FolderProfile.pubxml y luego cambie la versión 3.0 a 3.1

    netcoreapp3.1

  • Finalmente, reconstruya su aplicación antes de publicar

Kenneth Korir
fuente
Una buena llamada para proporcionar instrucciones explícitas para modificar el pubxmlarchivo manualmente, y especialmente dada la tontería de modificar estos valores a través de la GUI de Visual Studio 2019 . He incorporado estos detalles en mi respuesta original para que esta opción se explique explícitamente. ¡Gracias!
Jeremy Caney
0

cambio

<PackageReferenceInclude="Microsoft.AspNetCore"Version="2.2.0" />
 to 
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />

funciona para mi.

Libertad
fuente
1
Para ASP.NET Core 3.1 , todas las Microsoft.AspNetCorebibliotecas deben actualizarse 3.1.0, según las notas de la versión v3.1 de Microsoft. Su enfoque puede ser una solución válida para problemas similares en ASP.NET Core 2.2 , suponiendo que el error no fue causado por una falta de coincidencia entre sus archivos csprojy pubx, como sucedió en mi caso.
Jeremy Caney
La versión de los dos paquetes mencionados anteriormente se encuentra actualmente en 2.2.0 y está marcada como la última versión.
Libertad
1
@Libertad, debe actualizar su instalación de Visual Studio a la versión 16.4.0 para ver la última versión de dot net core 3.1
navule
@navule mi VS está actualizado. Los paquetes Aabove son solo paquetes nuget. Eche un vistazo a esto: nuget.org/packages/Microsoft.AspNetCore y vea su última versión
Libertad