게시 출력의 중복 파일에 대한 오류 생성

.NET SDK는 다른 소스 경로의 파일이 게시 출력의 동일한 파일 경로에 복사되는 경우 새 오류(NETSDK1152)를 생성합니다. 이 오류는 게시 출력에 포함된 동일한 이름의 파일이 프로젝트 및 해당 프로젝트 참조에 포함되는 경우에 발생할 수 있습니다.

도입된 버전

.NET SDK 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 웹 서비스를 참조하고 각각 고유한 appsettings.json 파일이 있는 ASP.NET Core 프로젝트
    • CopyToOutputDirectory가 불필요하게 Always로 설정된 프로젝트 항목

    이진 로그 파일은 중복 파일의 원인을 찾는 데 유용할 수 있습니다.

  • 또는 ErrorOnDuplicatePublishOutputFiles 속성을 false로 설정할 수 있습니다.

영향을 받는 API

N/A