Generación de un error para archivos duplicados en la salida de la publicación

El SDK de .NET genera un nuevo error (NETSDK1152) cuando los archivos de rutas de acceso de origen diferentes se van a copiar en la misma ruta de acceso de archivo en la salida de la publicación. Esto puede ocurrir cuando un proyecto y sus referencias de proyecto contienen un archivo con el mismo nombre que se incluye en la salida de la publicación.

Versión introducida

SDK DE .NET 6.0.100

Comportamiento anterior

Los dos archivos se han copiado en el mismo destino. El segundo archivo que se va a copiar ha sobrescrito el primero y el "ganador" ha sido básicamente arbitrario.

En algunos casos, se ha producido un error en la compilación. Por ejemplo, al intentar crear una aplicación de un solo archivo, se produce el error ArgumentException en el empaquetador, como se muestra en la salida de compilación siguiente:

C:\Program Files\dotnet\sdk\5.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: The "GenerateBundle" task failed unexpectedly. [C:\repro\repro.csproj]
C:\Program Files\dotnet\sdk\5.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: System.ArgumentException: Invalid input specification: Found multiple entries with the same BundleRelativePath [C:\repro\repro.csproj]
C:\Program Files\dotnet\sdk\5.0.403\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Publish.targets(962,5): error MSB4018: at Microsoft.NET.HostModel.Bundle.Bundler.GenerateBundle(IReadOnlyList`1 fileSpecs) [C:\repro\repro.csproj]

Comportamiento nuevo

A partir de .NET 6, MSBuild elimina los archivos duplicados que se copian en la carpeta de publicación si el origen y el destino son los mismos. Si hay duplicados restantes, se genera un error NETSDK1152 y se enumeran los archivos duplicados.

Motivo del cambio

En ocasiones, los archivos duplicados en la salida de la publicación han provocado interrupciones de compilación o un comportamiento imprevisible.

  • Lo ideal es actualizar el proyecto para evitar situaciones en las que se copien varios archivos con el mismo nombre en la salida de la publicación. El mensaje de error incluye el nombre del archivo duplicado. Entre las causas de la duplicación de archivos se incluyen las siguientes:

    • Un proyecto de ASP.NET Core que hace referencia a un servicio web de ASP.NET Core y cada uno tiene su propio archivo appsettings.json.
    • Un elemento de proyecto en el que CopyToOutputDirectory se establece innecesariamente en Always.

    Los archivos de registro binarios pueden ser útiles para encontrar la causa de la duplicación de archivos.

  • Como alternativa, puede establecer la propiedad ErrorOnDuplicatePublishOutputFiles en false.

API afectadas

N/D