Ensamblado recopilable en AssemblyLoadContext no recopilable

.NET permitía por error que los ensamblados recopilables no utilizados se resolvieran en un AssemblyLoadContext no recopilable. En algunos casos, esto provoca bloqueos del runtime o excepciones NullReferenceException inesperadas. Este cambio evita el comportamiento incorrecto iniciando una excepción cuando el evento AssemblyLoadContext.Load(AssemblyName) o AssemblyLoadContext.Resolving devuelve un Assembly recopilable y AssemblyLoadContext no es recopilable.

Comportamiento anterior

Devolver un Assembly recopilable en la invalidación AssemblyLoadContext.Load(AssemblyName) o en el evento AssemblyLoadContext.Resolving de un AssemblyLoadContext no recopilable no provoca ninguna excepción.

Comportamiento nuevo

Devolver un Assembly recopilable en la invalidación AssemblyLoadContext.Load(AssemblyName) o en el evento AssemblyLoadContext.Resolving de un AssemblyLoadContext no recopilable produce una System.IO.FileLoadException con NotSupportedException como excepción interna.

Versión introducida

.NET 7

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

Este cambio corrige un error. El Assembly recopilable sería un elemento no utilizado, mientras que el AssemblyLoadContext que tiene una referencia a él está activo durante el resto de la duración del proceso. Si el código que se ejecuta en ese contexto hace referencia a algo de Assembly después de que se recopile, bloquearía el runtime o provocaría una NullReferenceException, AccessViolationException u otro tipo de comportamiento incorrecto.

No devuelva ensamblados recopilables en AssemblyLoadContext.Load(AssemblyName) o en el evento AssemblyLoadContext.Resolving de un AssemblyLoadContext no recopilable. Una posible solución alternativa es cambiar el objeto AssemblyLoadContext que se va a recopilar pasando true para el parámetro isCollectible en su constructor y, después, mantener una referencia perpetua a AssemblyLoadContext para asegurarse de que nunca se recopila.

API afectadas

Consulte también