Compartilhar via


Gerar erro para arquivos duplicados na saída de publicação

O SDK do .NET gera um novo erro (NETSDK1152) nos casos em que arquivos de caminhos de origem diferentes seriam copiados para o mesmo caminho de arquivo na saída de publicação. Isso pode acontecer quando um projeto e suas referências de projeto incluem um arquivo com o mesmo nome incluído na saída de publicação.

Versão introduzida

SDK do .NET 6.0.100

Comportamento antigo

Ambos os arquivos foram copiados para o mesmo destino. O segundo arquivo a ser copiado substituiu o primeiro arquivo e qual arquivo "ganhou" foi principalmente arbitrário.

Em alguns casos, a compilação falhou. Por exemplo, ao tentar criar um aplicativo de arquivo único, o empacotador falhou com um ArgumentException, conforme mostrado na seguinte saída de build:

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]

Novo comportamento

A partir do .NET 6, o MSBuild remove arquivos duplicados que são copiados para a pasta de publicação se a origem e o destino forem iguais. Se houver duplicatas restantes, um NETSDK1152 erro será gerado e listará os arquivos duplicados.

Motivo da alteração

Arquivos duplicados nos resultados de publicação às vezes causavam quebras de compilação ou comportamento imprevisível.

  • Idealmente, você deve atualizar seu projeto para evitar situações em que vários arquivos com o mesmo nome sejam copiados para a saída de publicação. A mensagem de erro inclui o nome do arquivo duplicado. Algumas causas para arquivos duplicados incluem:

    • Um projeto do ASP.NET Core que faz referência a um serviço Web do ASP.NET Core e cada um tem seu próprio arquivo appsettings.json .
    • Um item de projeto em que CopyToOutputDirectory é desnecessariamente definido como Always.

    Os arquivos de log binário podem ser úteis para localizar a causa dos arquivos duplicados.

  • Como alternativa, você pode definir a propriedade ErrorOnDuplicatePublishOutputFiles como false.

APIs afetadas

Não aplicável