Поделиться через


Выдача ошибки при повторяющихся файлах в выходных данных публикации

Пакет SDK для .NET создает новую ошибку (NETSDK1152) в случаях, когда файлы из разных исходных путей копируются в один и тот же путь к файлу в выходных данных публикации. Это может произойти, если проект и его ссылки включают файл с одинаковым именем, который входит в выходные данные публикации.

Представленные версии

Пакет SDK для .NET 6.0.100

Старое поведение

Оба файла копировались в одно место назначения. Второй копируемый файл перезаписывал первый, и этот процесс происходил случайным образом.

В некоторых случаях сборка завершалась сбоем. Например, при попытке создать приложение с одним файлом средство упаковки завершалось с ошибкой ArgumentException, как показано в следующих выходных данных сборки:

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]

Новое поведение

Начиная с .NET 6, MSBuild удаляет дубликаты файлов, которые копируются в папку публикации, если источник и место назначения совпадают. Если какие-то дубликаты остались, выдается ошибка NETSDK1152 и выводится список повторяющихся файлов.

Причина изменения

Дубликаты файлов в выходных данных публикации иногда вызывают прерывание сборки или непредсказуемое поведение.

  • В идеале следует обновить проект, чтобы избежать ситуаций, когда в выходные данные публикации копируется несколько файлов с одним и тем же именем. Сообщение об ошибке содержит имя дублирующегося файла. Ниже перечислены некоторые причины дублирования файлов.

    • Проект ASP.NET Core, ссылающийся на веб-службу ASP.NET Core, у каждого из которых имеется собственный файл appsettings.json.
    • Элемент проекта, для которого параметру CopyToOutputDirectory необязательно задавать значение Always.

    Для поиска причины дублирования файлов могут оказаться полезными двоичные файлы журнала.

  • Кроме того, можно задать для свойства ErrorOnDuplicatePublishOutputFiles значение false.

Затронутые API

Н/Д