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:
- Kök çerçevenin (Microsoft.NetCore.App) .deps.json dosyasından RID grafiğini okuyun.
- Ç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.
- RID grafiğinde bulunan girdiden başlayarak, bu RID ile eşleşen varlıkları arayın.
- 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.
Önerilen eylem
Taşınabilir RID'ler kullanın; örneğin, linux
, linux-musl
, osx
ve 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.UseRidGraph
true
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>