Sdílet prostřednictvím


Vygenerování chyby u duplicitních souborů ve výstupu publikování

Sada .NET SDK vygeneruje novou chybu (NETSDK1152) v případech, kdy se soubory z různých zdrojových cest zkopírují do stejné cesty k souboru ve výstupu publikování. K tomu může dojít, když projekt a jeho odkazy na projekt obsahují soubor se stejným názvem, který je součástí výstupu publikování.

Zavedená verze

.NET SDK 6.0.100

Staré chování

Oba soubory se zkopírovaly do stejného cíle. Druhý soubor, který se má zkopírovat, přepíše první soubor a který soubor "won" byl většinou libovolný.

V některých případech se sestavení nezdařilo. Například při pokusu o vytvoření aplikace s jedním souborem selhal bundler s chybou ArgumentException, jak je znázorněno v následujícím výstupu sestavení:

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]

Nové chování

Počínaje rozhraním .NET 6 nástroj MSBuild odebere duplicitní soubory, které se zkopírují do složky publikování, pokud jsou zdroj i cíl stejné. Pokud existují nějaké zbývající duplicity, NETSDK1152 vygeneruje se chyba a vypíše soubory, které jsou duplikovány.

Důvod změny

Duplicitní soubory ve výstupu publikování někdy způsobily přerušení sestavení nebo nepředvídatelné chování.

  • V ideálním případě byste měli projekt aktualizovat, abyste se vyhnuli situacím, kdy se do výstupu publikování zkopíruje více souborů se stejným názvem. Chybová zpráva obsahuje název duplicitního souboru. Mezi příčiny duplicitních souborů patří:

    • Projekt ASP.NET Core, který odkazuje na webovou službu ASP.NET Core a každý má svůj vlastní soubor appsettings.json .
    • Položka projektu, kde CopyToOutputDirectory je zbytečně nastavena .Always

    Binární soubory protokolu mohou být užitečné pro vyhledání příčiny duplicitních souborů.

  • Alternativně můžete nastavit ErrorOnDuplicatePublishOutputFiles vlastnost .false

Ovlivněná rozhraní API