Condividi tramite


Generare un errore per i file duplicati nell'output di pubblicazione

.NET SDK genera un nuovo errore (NETSDK1152) nei casi in cui i file di percorsi di origine diversi verranno copiati nello stesso percorso di file nell'output di pubblicazione. Ciò può verificarsi quando un progetto e i relativi riferimenti al progetto includono un file con lo stesso nome incluso nell'output di pubblicazione.

Versione introdotta

.NET SDK 6.0.100

Comportamento precedente

Entrambi i file sono stati copiati nella stessa destinazione. Il secondo file da copiare sovrascriveva il primo file, e quale file "vincesse" era per lo più arbitrario.

In alcuni casi, la compilazione non è riuscita. Ad esempio, quando si tenta di creare un'app a file singolo, il bundler non è riuscito con un oggetto ArgumentException, come illustrato nell'output di compilazione seguente:

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]

Nuovo comportamento

A partire da .NET 6, MSBuild rimuove i file duplicati copiati nella cartella di pubblicazione se sia l'origine che la destinazione sono uguali. Se sono presenti duplicati rimanenti, viene generato un errore NETSDK1152 ed elenca i file duplicati.

Motivo della modifica

I file duplicati nell'output di pubblicazione talvolta causavano interruzioni di compilazione o comportamento imprevedibile.

  • Idealmente, è consigliabile aggiornare il progetto per evitare situazioni in cui più file con lo stesso nome vengono copiati nell'output di pubblicazione. Il messaggio di errore include il nome del file duplicato. Alcune cause di duplicazione dei file sono:

    • Un progetto ASP.NET Core che fa riferimento a un servizio Web ASP.NET Core e ognuno ha un proprio file appsettings.json.
    • Una voce di progetto dove CopyToOutputDirectory è inutilmente impostata su Always.

    I file di log binari possono essere utili per trovare la causa dei file duplicati.

  • In alternativa, è possibile impostare la proprietà ErrorOnDuplicatePublishOutputFiles su false.

API interessate

N/D