Aracılığıyla paylaş


Yayımlama çıktısında yinelenen dosyalar için hata oluşturma

.NET SDK'sı, farklı kaynak yollardaki dosyaların yayımlama çıktısında aynı dosya yoluna kopyalandığı durumlarda yeni bir hata (NETSDK1152) oluşturur. Bu durum, bir proje ve proje başvuruları yayımlama çıkışında bulunan aynı ada sahip bir dosya içerdiğinde oluşabilir.

Sürüm kullanıma sunulmuştur

.NET SDK 6.0.100

Eski davranış

Her iki dosya da aynı hedefe kopyalandı. Kopyalanacak ikinci dosya, ilk dosyanın üzerine yazılır ve "kazanıldı" dosyası çoğunlukla rastgeledir.

Bazı durumlarda derleme başarısız oldu. Örneğin, tek dosyalı bir uygulama oluşturmaya çalışırken, paketleyici aşağıdaki derleme çıkışında gösterildiği gibi ile ArgumentExceptionbaşarısız oldu:

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]

Yeni davranış

.NET 6'dan başlayarak, hem kaynak hem de hedef aynıysa MSBuild yayımlama klasörüne kopyalanan yinelenen dosyaları kaldırır. Kalan yinelemeler varsa bir NETSDK1152 hata oluşturulur ve yinelenen dosyalar listelenir.

Değişiklik nedeni

Yayımlama çıkışındaki yinelenen dosyalar bazen derleme kesintilerine veya öngörülemeyen davranışlara neden olur.

  • İdeal olarak, aynı ada sahip birden çok dosyanın yayımlama çıkışına kopyalandığı durumlardan kaçınmak için projenizi güncelleştirmeniz gerekir. Hata iletisi yinelenen dosyanın adını içerir. Yinelenen dosyaların bazı nedenleri şunlardır:

    • bir ASP.NET Core web hizmetine başvuran ve her birinin kendi appsettings.json dosyası olan bir ASP.NET Core projesi.
    • Gereksiz yere olarak ayarlandığı CopyToOutputDirectoryAlwaysbir proje öğesi.

    İkili günlük dosyaları, yinelenen dosyaların nedenini bulmak için yararlı olabilir.

  • Alternatif olarak ErrorOnDuplicatePublishOutputFiles özelliğini olarak falseayarlayabilirsiniz.

Etkilenen API’ler

Yok