Udostępnij za pośrednictwem


Generowanie błędu dla zduplikowanych plików w danych wyjściowych publikowania

Zestaw .NET SDK generuje nowy błąd (NETSDK1152) w przypadkach, gdy pliki z różnych ścieżek źródłowych zostaną skopiowane do tej samej ścieżki pliku w danych wyjściowych publikowania. Może się tak zdarzyć, gdy projekt i jego odwołania do projektu zawierają plik o takiej samej nazwie, która jest uwzględniona w danych wyjściowych publikowania.

Wprowadzona wersja

Zestaw .NET SDK 6.0.100

Stare zachowanie

Oba pliki zostały skopiowane do tego samego miejsca docelowego. Drugi plik, który ma zostać skopiowany, zastępuje pierwszy plik i który plik "won" był w większości dowolny.

W niektórych przypadkach kompilacja nie powiodła się. Na przykład podczas próby utworzenia aplikacji z jednym plikiem pakiet zakończył się niepowodzeniem z elementem ArgumentException, jak pokazano w następujących danych wyjściowych kompilacji:

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]

Nowe zachowanie

Począwszy od platformy .NET 6, program MSBuild usuwa zduplikowane pliki, które są kopiowane do folderu publikowania, jeśli zarówno źródło, jak i miejsce docelowe są takie same. Jeśli istnieją pozostałe duplikaty, NETSDK1152 jest generowany błąd i wyświetla listę plików, które są zduplikowane.

Przyczyna wprowadzenia zmiany

Zduplikowane pliki w danych wyjściowych publikowania czasami spowodowały awarie kompilacji lub nieprzewidywalne zachowanie.

  • W idealnym przypadku należy zaktualizować projekt, aby uniknąć sytuacji, w których wiele plików o tej samej nazwie jest kopiowanych do danych wyjściowych publikowania. Komunikat o błędzie zawiera nazwę zduplikowanego pliku. Oto niektóre przyczyny zduplikowanych plików:

    • Projekt ASP.NET Core, który odwołuje się do usługi internetowej ASP.NET Core, a każdy z nich ma własny plik appsettings.json .
    • Element projektu, w którym CopyToOutputDirectory jest niepotrzebnie ustawiony na Alwayswartość .

    Pliki dziennika binarnego mogą być przydatne do znalezienia przyczyny zduplikowanych plików.

  • Alternatywnie można ustawić właściwość ErrorOnDuplicatePublishOutputFiles na falsewartość .

Dotyczy interfejsów API

Nie dotyczy