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.
Ação recomendada
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 comoAlways
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