Génération d’une erreur en cas de fichiers en double dans la sortie de publication

Le kit de développement logiciel (SDK) .NET génère une nouvelle erreur (NETSDK1152) dans les cas où des fichiers provenant de chemins sources différents sont copiés dans le même chemin de fichier dans la sortie de publication. Cela peut se produire lorsqu’un projet et ses références comprennent un fichier portant le même nom que celui inclus dans la sortie de publication.

Version introduite

Kit de développement logiciel (SDK) .NET 6.0.100

Ancien comportement

Les deux fichiers étaient copiés vers la même destination. Le deuxième fichier à copier remplaçait le premier, et le fichier « gagnant » était en grande partie arbitraire.

Dans certains cas, la génération échouait. Par exemple, lors de la création d’une application à fichier unique, le bundler rencontrait une exception ArgumentException, comme on le voit dans la sortie de build suivante :

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]

Nouveau comportement

À compter de .NET 6, MSBuild supprime les fichiers en double copiés dans le dossier de publication si la source et la destination sont identiques. S’il reste des doublons, une erreur NETSDK1152 est générée et donne la liste des fichiers en double.

Raison du changement

Les fichiers en double dans la sortie de publication provoquaient parfois des interruptions de génération ou un comportement imprévisible.

  • Dans l’idéal, mettez à jour votre projet pour éviter les situations dans lesquelles plusieurs fichiers portant le même nom sont copiés dans la sortie de publication. Le message d’erreur inclut le nom du fichier en double. Voici quelques causes de doublons :

    • Un projet ASP.NET Core fait référence à un service web ASP.NET Core. Chacun dispose de son propre fichier appsettings.json.
    • CopyToOutputDirectory est inutilement défini sur Always dans un élément de projet.

    Les fichiers journaux binaires peuvent être utiles pour rechercher la cause des fichiers dupliqués.

  • Vous pouvez également définir la propriété ErrorOnDuplicatePublishOutputFiles sur false.

API affectées

N/A