Выдача ошибки при повторяющихся файлах в выходных данных публикации
Пакет 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
Н/Д