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

Das .NET SDK generiert einen neuen Fehler (NETSDK1152), wenn 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 dem gleichen Namen enthalten, der auch in der Veröffentlichungsausgabe enthalten ist.

Eingeführt in 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 Quelle und Ziel identisch sind. Wenn noch Duplikate vorhanden sind, wird ein NETSDK1152-Fehler generiert, und es werden die duplizierten Dateien aufgelistet.

Grund für die Änderung

Doppelte Dateien in der Veröffentlichungsausgabe führten manchmal zu Buildunterbrechungen oder unvorhersehbaren Verhaltensweisen.

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

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

    Binäre Protokolldateien können nützlich sein, um die Ursache der duplizierten Dateien zu ermitteln.

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

Betroffene APIs