Ana bilgisayar RID'ye özgü varlıkları belirler

Bir uygulamayı çalışma zamanı tanımlayıcısı (RID) belirli varlıklarla çalıştırırken, konak hangi varlıkların üzerinde çalıştığı platform için uygun olduğunu belirler. Bu, hem uygulamanın kendisi hem de tarafından AssemblyDependencyResolverkullanılan çözümleme mantığı için geçerlidir.

Daha önce, konak çalışma zamanında RID'yi hesaplamaya çalışıyordu ve ardından RID grafiğini okuyarak hangi RID'ye özgü varlıkların hesaplanan RID ile eşleştiği veya uyumlu olduğunu saptadı. Artık varsayılan davranış RID'yi hesaplamaz veya RID grafiğini kullanmaz. Bunun yerine konak, çalışma zamanının nasıl oluşturulduğuna bağlı olarak bilinen bir RID listesine dayanır.

Önceki davranış

Daha önce RID'ye özgü varlıkları seçme işlemi şu şekildeydi:

  1. Kök çerçevenin (Microsoft.NetCore.App) .deps.json dosyasından RID grafiğini okuyun.
  2. Çalışma zamanında geçerli RID'yi hesaplayın ve RID grafiğinde bunun için bir giriş bulmaya çalışın. Yoksa, geri dönüş RID'sini (derleme zamanında konağa yerleşik olarak) denetleyin.
  3. RID grafiğinde bulunan girdiden başlayarak, bu RID ile eşleşen varlıkları arayın.
  4. Bir varlık eşleşmesi bulunana veya liste bitene kadar RID grafı girişindeki RID listesini aşağı doğru devam edin.

RID grafiğinde hesaplanan RID veya geri dönüş RID'i yoksa RID varlıkları düzgün çözümlenmedi.

Yeni davranış

Varsayılan olarak, işlem artık RID grafiğine bağlı değildir. Bunun yerine, konağın nasıl oluşturulduğuna bağlı olarak bilinen bir taşınabilir RID kümesini denetler. Örneğin:

Linux

  • linux-x64
  • linux
  • unix-x64
  • Unıx
  • herhangi bir

Windows

  • win-x64
  • Kazanmak
  • herhangi bir

macOS

  • osx-x64
  • Osx
  • unix-x64
  • Unıx

Konak veya çalışma zamanının taşınabilir olmayan derlemeleri için derleme, önce denetlenen taşınabilir olmayan bir RID de ayarlayabilir.

Sürüm kullanıma sunulmuştur

.NET 8 Önizleme 5

Hataya neden olan değişikliğin türü

Bu değişiklik ikili uyumluluğu etkileyebilir ve aynı zamanda davranışsal bir değişikliktir.

Değişiklik nedeni

RID grafiğinin bakımı ve anlaşılması maliyetliydi ve .NET'in kendisini kırılgan bir şekilde dağıtıma duyarlı hale getirmek gerekti. .NET ekibi ve topluluk, grafı güncelleştirmek ve bu tür güncelleştirmeleri önceki sürümlere geri aktarmak için önemsiz bir süre harcar. Uzun vadeli hedef, RID grafiğini güncelleştirmeyi durdurmak, okumayı durdurmak ve sonunda kaldırmaktır. Bu hataya neden olan değişiklik, bu hedefe yönelik bir adımdır.

Taşınabilir RID'ler kullanın; örneğin, linux, linux-musl, osxve win. Özel kullanım örnekleri için veya AssemblyLoadContext.ResolvingUnmanagedDll gibi NativeLibrary.SetDllImportResolver(Assembly, DllImportResolver) API'leri özel yükleme mantığı için kullanabilirsiniz.

Önceki davranışa geri dönmeniz gerekiyorsa, runtimeconfig.json dosyanızda geriye dönük uyumluluk anahtarını System.Runtime.Loader.UseRidGraphtrue olarak ayarlayın. anahtarının olarak true ayarlanması, konağa RID grafiğini okumanın önceki davranışını kullanmasını sağlar. Alternatif olarak, proje dosyanızda MSBuild özelliğini true olarak ayarlayabilirsinizUseRidGraph. Örneğin:

<PropertyGroup>
  <UseRidGraph>true</UseRidGraph>
</PropertyGroup>

Etkilenen API’ler

Ayrıca bkz.