Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Históricamente, pasar tipos derivados de SafeHandle a P/Invokes y métodos COM ha requerido implícitamente un constructor sin parámetros de cualquier visibilidad cuando un tipo derivado de SafeHandle se pasa como un parámetro ref u out o un tipo de valor devuelto. La interoperabilidad generada por la fuente en .NET 7 permitió habilitar este comportamiento para facilitar la migración desde las P/Invokes basadas en DllImportAttribute. Al mismo tiempo, actualizamos la documentación de SafeHandle para indicar a los implementadores que proporcionen un public constructor sin parámetros en su tipo derivado. Este cambio importante hace que esa recomendación sea un requisito para la serialización generada por el origen.
Comportamiento anterior
Se requería un tipo derivado de SafeHandle para tener un constructor sin parámetros de cualquier visibilidad cuando se usaba:
- Como parámetro
refuouto un tipo de valor devuelto en un método con atributos de LibraryImportAttribute. - En un método en una interfaz con atributos de GeneratedComInterfaceAttribute.
Nuevo comportamiento
Se requiere un tipo derivado SafeHandle que tenga un constructor sin parámetros public cuando se utiliza:
- Como parámetro
refuouto un tipo de valor devuelto en un método con atributos de LibraryImportAttribute. - En un método en una interfaz con atributos de GeneratedComInterfaceAttribute.
Si el tipo no tiene un public constructor sin parámetros, el generador de origen de interoperabilidad emite un error de compilación.
Versión introducida
.NET 8 (versión preliminar 5)
Tipo de cambio disruptivo
Este cambio puede afectar a la compatibilidad de orígenes.
Motivo del cambio
Los generadores de origen de interoperabilidad están cambiando para insertar más código fuera de los propios generadores de origen y en las bibliotecas principales de .NET. Como parte de este cambio, el equipo de interoperabilidad empieza a aplicar las directrices recomendadas para un código de interoperabilidad más fácil de mantener y comprender.
Acción recomendada
Cambie el constructor no public sin parámetros existente en el tipo derivado de SafeHandle para que sea public.