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.
Acción recomendada
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
- System.Runtime.Loader.AssemblyLoadContext.Load(AssemblyName)
- EventoSystem.Runtime.Loader.AssemblyLoadContext.Resolving
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de