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.
Action recommandée
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 surAlways
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