Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
El paquete NuGet System.Drawing.Common ahora se asigna como biblioteca específica de Windows. El analizador de la plataforma emite una advertencia en tiempo de compilación al compilar para sistemas operativos distintos de Windows.
En sistemas operativos distintos de Windows, a menos que establezca un modificador de configuración en tiempo de ejecución, se produce una excepción TypeInitializationException con PlatformNotSupportedException como excepción interna.
Antes de .NET 6, el uso del paquete System.Drawing.Common no generaba ninguna advertencia en tiempo de compilación, y no se producía ninguna excepción en tiempo de ejecución.
A partir de .NET 6, el analizador de la plataforma emite advertencias en tiempo de compilación cuando el código de referencia se compila para sistemas operativos distintos de Windows. Además, se produce la siguiente excepción en tiempo de ejecución, a menos que establezca una opción de configuración:
System.TypeInitializationException : The type initializer for 'Gdip' threw an exception.
---- System.PlatformNotSupportedException : System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.
Stack Trace:
at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromFile(String filename, IntPtr& bitmap)
/_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(42,0): at System.Drawing.Bitmap..ctor(String filename, Boolean useIcm)
/_/src/libraries/System.Drawing.Common/src/System/Drawing/Bitmap.cs(25,0): at System.Drawing.Bitmap..ctor(String filename)
/_/src/libraries/System.Resources.ResourceManager/tests/ResourceManagerTests.cs(270,0): at System.Resources.Tests.ResourceManagerTests.EnglishImageResourceData()+MoveNext()
/_/src/libraries/System.Linq/src/System/Linq/Select.cs(136,0): at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
----- Inner Stack Trace -----
/_/src/libraries/System.Drawing.Common/src/System/Drawing/LibraryResolver.cs(31,0): at System.Drawing.LibraryResolver.EnsureRegistered()
/_/src/libraries/System.Drawing.Common/src/System/Drawing/GdiplusNative.Unix.cs(65,0): at System.Drawing.SafeNativeMethods.Gdip.PlatformInitialize()
/_/src/libraries/System.Drawing.Common/src/System/Drawing/Gdiplus.cs(27,0): at System.Drawing.SafeNativeMethods.Gdip..cctor()
.NET 6
Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria.
Dado que System.Drawing.Common
se diseñó para ser un contenedor fino en tecnologías Windows, su implementación multiplataforma es inferior a lo esperado.
libgdiplus
es el proveedor principal de la implementación multiplataforma de System.Drawing.Common
en el lado nativo. libgdiplus
es realmente una reimplementación de las partes de Windows de las que depende System.Drawing.Common
. Esa implementación hace que libgdiplus
sea un componente no trivial. Se trata de unas 30 000 líneas de código de C que, en su mayoría, no se ha probado y que carece de muchas funcionalidades. libgdiplus
también tiene varias dependencias externas para el procesamiento de imágenes y la representación de texto, como cairo
, pango
y otras bibliotecas nativas. Esas dependencias hacen que el mantenimiento y el envío del componente sean aún más complicados. Desde la inclusión de la implementación multiplataforma de Mono, hemos redirigido diversos problemas a libgdiplus
que nunca se corrigieron. En comparación, otras dependencias externas que hemos tomado, como icu
o openssl
, son bibliotecas de alta calidad. No es viable hacer que libgdiplus
llegue al punto en el que su conjunto de características y su calidad estén a la par del resto de la pila de .NET.
A partir del análisis de paquetes NuGet, hemos observado que System.Drawing.Common
se usa principalmente en varias plataformas para la manipulación de imágenes, como generadores de código QR y representación de texto. No hemos observado un uso extendido de gráficos, ya que la compatibilidad con gráficos multiplataforma está incompleta. Los usos que vemos System.Drawing.Common
en entornos distintos de Windows suelen ser compatibles con SkiaSharp e ImageSharp.
System.Drawing.Common
seguirá evolucionando solo en el contexto de Windows Forms y GDI+.
Para usar estas API para aplicaciones multiplataforma, migre a una de las bibliotecas siguientes:
Como alternativa, puede habilitar la compatibilidad con plataformas que no sean Windows en .NET 6 si establece el System.Drawing.EnableUnixSupport
modificador de configuración en tiempo de ejecución en true
en el archivo runtimeconfig.json.
Archivo de plantilla runtimeconfig.template.json:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
Archivo de salida [appname].runtimeconfig.json:
{
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
}
Nota
Espacio de nombres System.Drawing:
Espacio de nombres System.Drawing.Drawing2D:
Espacio de nombres System.Drawing.Imaging:
Espacio de nombres System.Drawing.Printing:
Espacio de nombres System.Drawing.Text:
Comentarios de .NET
.NET es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
Eventos
Compilación de Intelligent Apps
17 mar, 21 - 21 mar, 10
Únase a la serie de reuniones para crear soluciones de inteligencia artificial escalables basadas en casos de uso reales con compañeros desarrolladores y expertos.
Regístrese ahoraCursos
Módulo
Implementación del control de excepciones en aplicaciones de consola de C# - Training
En este módulo se explora el uso de excepciones y el proceso de control de excepciones en aplicaciones de consola de C#. Las actividades prácticas proporcionan experiencia en la implementación de patrones de control de excepciones para varios escenarios de codificación.
Documentación
Cambio importante: se ha quitado el modificador de configuración System.Drawing.Common - .NET
Obtenga información sobre el cambio importante de .NET 7 en el que se quitó el modificador EnableUnixSupport para habilitar la compatibilidad con System.Drawing.Common en sistemas operativos que no son Windows.
Cambio importante: System.Windows.Extensions no hace referencia a System.Drawing.Common - .NET
Obtenga información sobre el cambio importante en .NET 8, donde el paquete System.Windows.Extensions ya no hace referencia a System.Drawing.Common.
CA1416: Validación de la compatibilidad con las plataformas (análisis de código) - .NET
Obtenga más información sobre la regla de análisis de código CA1416: Validación de la compatibilidad con las plataformas.