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 diferentes caminhos de origem seriam copiados para o mesmo caminho de arquivo na saída de publicação. Isso pode acontecer quando um projeto e as 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 "won" foi na maioria das vezes 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 removeu os arquivos duplicados que seriam copiados para a pasta de publicação se a origem e o destino fossem os mesmos. Se houver duplicatas restantes, um erro NETSDK1152 será gerado e listará os arquivos duplicados.

Motivo da alteração

Os arquivos duplicados na saída de publicação às vezes causavam interrupção de build ou comportamento imprevisível.

  • O ideal é atualizar o projeto para evitar as 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 ASP.NET Core que faz referência a um serviço Web ASP.NET Core e cada um tem seu próprio arquivo appsettings.json.
    • Um item de projeto em que CopyToOutputDirectory é definido como Always desnecessariamente.

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

  • Como alternativa, é possível definir a propriedade ErrorOnDuplicatePublishOutputFiles para false.

APIs afetadas

N/D