Compartir a través de


Cambios importantes de MSBuild en .NET Core 2.1 - 3.1

En esta página se documentan los siguientes cambios importantes:

Cambio importante Versión introducida
Las compilaciones en tiempo de diseño solo devuelven referencias de paquete de nivel superior 3.1
Cambio de nombre de archivo de manifiesto del recurso 3.0
Herramientas de proyecto ahora incluidas en el SDK 2.1

.NET Core 3.1

Las compilaciones en tiempo de diseño solo devuelven referencias de paquete de nivel superior

A partir del SDK de .NET Core 3.1.400, el destino de RunResolvePackageDependencies solo devuelve las referencias de paquete de nivel superior.

Versión introducida

SDK 3.1.400 de .NET Core

Descripción del cambio

En versiones anteriores del SDK de .NET Core, el destino RunResolvePackageDependencies creó los siguientes elementos de MSBuild que contenían información del archivo de recursos de NuGet:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Visual Studio usa estos datos para rellenar el nodo Dependencias en el explorador de soluciones, pero puede ser una gran cantidad de datos y estos no son necesarios a menos que se expanda el nodo Dependencias.

A partir de la versión 3.1.400 del SDK de .NET Core, la mayoría de estos elementos no se generan de forma predeterminada. Solo se devuelven los elementos de tipo Package. Si Visual Studio necesita que los elementos rellenen el nodo dependencias, lee la información directamente del archivo de recursos.

Motivo del cambio

Este cambio se presentó para mejorar el rendimiento de carga de la solución dentro de Visual Studio. Anteriormente, todas las referencias de paquete se cargaban, lo que implicaba la carga de muchas referencias que la mayoría de los usuarios nunca veían.

Si tiene lógica de MSBuild que depende de la creación de estos elementos, establezca la propiedad EmitLegacyAssetsFileItems en true en el archivo del proyecto. Esta configuración habilita el comportamiento anterior en el que se crean todos los elementos.

Categoría

MSBuild

API afectadas

N/D


.NET Core 3.0

Cambio de nombre de archivo de manifiesto del recurso

A partir de .NET Core 3.0, en el caso predeterminado, MSBuild genera un nombre de archivo de manifiesto diferente para los archivos de recursos.

Versión introducida

3.0

Descripción del cambio

Antes de .NET Core 3.0, si no se especificaban los metadatos LogicalName, ManifestResourceName o DependentUpon para un elemento de EmbeddedResource del archivo del proyecto, MSBuild generaba un nombre de archivo de manifiesto con el patrón <RootNamespace>.<ResourceFilePathFromProjectRoot>.resources. Si RootNamespace no está definido en el archivo del proyecto, se toma como valor predeterminado el nombre del proyecto. Por ejemplo, el nombre de manifiesto generado para un archivo de recursos denominado Form1.resx en el directorio raíz del proyecto era suproject.Form1.Resources.

A partir de .NET Core 3.0, si un archivo de recursos está ubicado conjuntamente con un archivo de código fuente del mismo nombre (por ejemplo, Form1.resx y Form1.cs), MSBuild usa la información de tipo del archivo de código fuente para generar el nombre del archivo de manifiesto con el patrón <Namespace>.<ClassName>.resources. El espacio de nombres y el nombre de clase se extraen del primer tipo del archivo de código fuente ubicado conjuntamente. Por ejemplo, el nombre de manifiesto generado para un archivo de recursos denominado Form1.resx que se ubica conjuntamente con un archivo de código fuente denominado Form1.cs es myNameSpace.Form1.Resources. Lo más importante que hay que tener en cuenta es que la primera parte del nombre de archivo es diferente en versiones anteriores de .NET Core (myNameSpace en lugar de MyProject).

Nota

Si tiene los metadatos LogicalName, ManifestResourceName o DependentUpon especificados en un elemento EmbeddedResource del archivo del proyecto, este cambio no afecta a ese archivo de recursos.

Este cambio importante se presentó con la incorporación de la propiedad EmbeddedResourceUseDependentUponConvention a los proyectos de .NET Core. De forma predeterminada, los archivos de recursos no se enumeran explícitamente en un archivo de proyecto de .NET Core, por lo que no tienen metadatos DependentUpon para especificar cómo nombrar el archivo .resources generado. Cuando EmbeddedResourceUseDependentUponConvention se establece en true, que es el valor predeterminado, MSBuild busca un archivo de código fuente ubicado conjuntamente y extrae un espacio de nombres y un nombre de clase de ese archivo. Si establece EmbeddedResourceUseDependentUponConvention en false, MSBuild genera el nombre del manifiesto según el comportamiento anterior, que combina RootNamespace y la ruta de acceso relativa del archivo.

En la mayoría de los casos, no se requiere ninguna acción por parte del desarrollador y la aplicación seguirá funcionando. Sin embargo, si este cambio invalida la aplicación, puede:

  • Cambiar el código para que espere el nuevo nombre de manifiesto.

  • Rechazar la nueva convención de nomenclatura mediante el establecimiento de EmbeddedResourceUseDependentUponConvention en false en el archivo del proyecto.

    <PropertyGroup>
      <EmbeddedResourceUseDependentUponConvention>false</EmbeddedResourceUseDependentUponConvention>
    </PropertyGroup>
    

Categoría

MSBuild

API afectadas

N/D


.NET Core 2.1

Herramientas de proyecto ahora incluidas en el SDK

El SDK de .NET Core 2.1 ahora incluye herramientas comunes de la CLI y ya no es necesario hacer referencia a estas herramientas desde el proyecto.

Descripción del cambio

En .NET Core 2.0, los proyectos hacen referencia a herramientas de .NET externas con la opción de configuración <DotNetCliToolReference> del proyecto. En .NET Core 2.1, algunas de estas herramientas se incluyen en el SDK de .NET Core y esa configuración ya no es necesaria. Si incluye referencias a estas herramientas en el proyecto, recibirá un error parecido al siguiente: La herramienta "Microsoft.EntityFrameworkCore.Tools.DotNet" se incluye ahora en el SDK de .NET Core.

Herramientas ahora incluidas en el SDK de .NET Core 2.1:

Valor <DotNetCliToolReference> Herramienta
Microsoft.DotNet.Watcher.Tools dotnet-watch
Microsoft.Extensions.SecretManager.Tools dotnet-user-secrets
Microsoft.Extensions.Caching.SqlConfig.Tools dotnet-sql-cache
Microsoft.EntityFrameworkCore.Tools.DotNet dotnet-ef

Versión introducida

SDK de .NET Core 2.1.300

Quite la configuración <DotNetCliToolReference> del proyecto.

Categoría

MSBuild

API afectadas

N/D