Freigeben über


Generieren eines Fehlers für doppelte Dateien in der Veröffentlichungsausgabe

Das .NET SDK generiert einen neuen Fehler (NETSDK1152) in Fällen, in denen Dateien aus verschiedenen Quellpfaden in denselben Dateipfad in der Veröffentlichungsausgabe kopiert werden. Dies kann passieren, wenn ein Projekt und seine Projektverweise eine Datei mit demselben Namen enthalten, der in der Veröffentlichungsausgabe enthalten ist.

Eingeführte Version

.NET SDK 6.0.100

Altes Verhalten

Beide Dateien wurden an dasselbe Ziel kopiert. Die zweite zu kopierende Datei hat die erste Datei überschrieben, und welche Datei „gewonnen“ hat, war größtenteils willkürlich.

In einigen Fällen schlug die Erstellung fehl. Wenn Sie beispielsweise versuchen, eine Einzeldatei-App zu erstellen, gab der Bundler einen Fehler mit der ArgumentException wie in der folgenden Buildausgabe aus:

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]

Neues Verhalten

Ab .NET 6 entfernt MSBuild doppelte Dateien, die in den Veröffentlichungsordner kopiert werden, wenn sowohl die Quelle als auch das Ziel identisch sind. Wenn noch Duplikate vorhanden sind, wird ein NETSDK1152 Fehler generiert und die dateien aufgelistet, die dupliziert sind.

Grund für Änderung

Doppelte Dateien in der Veröffentlichungsausgabe verursachten manchmal Buildunterbrechungen oder unvorhersehbares Verhalten.

  • Im Idealfall sollten Sie Ihr Projekt aktualisieren, um Situationen zu vermeiden, in denen mehrere Dateien mit demselben Namen in die Veröffentlichungsausgabe kopiert werden. Die Fehlermeldung enthält den Namen der doppelten Datei. Einige Ursachen für doppelte Dateien sind:

    • Ein ASP.NET Core-Projekt, das auf einen ASP.NET Core-Webdienst verweist und jeder über eine eigene appsettings.json Datei verfügt.
    • Ein Projektelement, bei dem CopyToOutputDirectory unnötigerweise auf Always festgelegt ist.

    Binäre Protokolldateien können hilfreich sein, um die Ursache der duplizierten Dateien zu finden.

  • Alternativ können Sie die Eigenschaft ErrorOnDuplicatePublishOutputFiles auf false einstellen.

Betroffene APIs

Nicht verfügbar