Acara
Membangun Aplikasi dan Agen AI
17 Mar, 21 - 21 Mar, 10
Bergabunglah dengan seri meetup untuk membangun solusi AI yang dapat diskalakan berdasarkan kasus penggunaan dunia nyata dengan sesama pengembang dan pakar.
Daftar sekarangBrowser ini sudah tidak didukung.
Mutakhirkan ke Microsoft Edge untuk memanfaatkan fitur, pembaruan keamanan, dan dukungan teknis terkini.
Paket System.Drawing.Common NuGet sekarang dikaitkan sebagai pustaka khusus Windows. Penganalisis platform memunculkan peringatan pada waktu kompilasi saat mengkompilasi untuk sistem operasi non-Windows.
Pada sistem operasi non-Windows, kecuali Anda mengatur sakelar konfigurasi runtime, TypeInitializationException pengecualian dilemparkan sebagai PlatformNotSupportedException pengecualian dalam.
Sebelum .NET 6, menggunakan paket System.Drawing.Common tidak menghasilkan peringatan waktu kompilasi, dan tidak ada pengecualian run-time yang dilemparkan.
Mulai dari .NET 6, penganalisis platform memancarkan peringatan waktu kompilasi saat mereferensikan kode dikompilasi untuk sistem operasi non-Windows. Selain itu, pengecualian run-time berikut dilemparkan kecuali Anda mengatur opsi konfigurasi:
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
Perubahan ini dapat memengaruhi kompatibilitas sumber dan kompatibilitas biner.
Karena System.Drawing.Common
dirancang untuk menjadi pembungkus tipis atas teknologi Windows, implementasi lintas platformnya adalah subpar.
libgdiplus
adalah penyedia utama implementasi lintas platform dari System.Drawing.Common
sisi asli. libgdiplus
secara efektif merupakan pelengkap dari bagian-bagian Windows yang System.Drawing.Common
bergantung pada. Implementasi tersebut membuat libgdiplus
komponen yang tidak sepele. Ini sekitar 30.000 baris kode C yang sebagian besar belum dites, dan tidak memiliki banyak fungsionalitas. libgdiplus
juga memiliki banyak dependensi eksternal untuk pemrosesan gambar dan penyajian teks, seperti cairo
, pango
, dan pustaka asli lainnya. Dependensi tersebut membuat pemeliharaan dan pengiriman komponen menjadi lebih menantang. Sejak dimasukkannya implementasi lintas platform Mono, kami telah mengalihkan banyak masalah ke libgdiplus
yang tidak pernah diperbaiki. Sebagai perbandingan, dependensi eksternal lain yang telah kami ambil, seperti icu
atau openssl
, adalah pustaka berkualitas tinggi. Tidak layak untuk sampai libgdiplus
ke titik di mana set fitur dan kualitasnya sejajar dengan sisa tumpukan .NET.
Dari analisis paket NuGet, kami telah mengamati bahwa System.Drawing.Common
sebagian besar digunakan lintas platform untuk manipulasi gambar, seperti generator kode QR dan penyajian teks. Kami belum melihat penggunaan grafis yang berat, karena dukungan grafis lintas platform kami tidak lengkap. Penggunaan yang kita lihat System.Drawing.Common
di lingkungan non-Windows biasanya didukung dengan baik dengan SkiaSharp dan ImageSharp.
System.Drawing.Common
akan terus berkembang hanya dalam konteks Formulir Windows dan GDI+.
Untuk menggunakan API ini untuk aplikasi lintas platform, migrasikan ke salah satu pustaka berikut:
Atau, Anda dapat mengaktifkan dukungan untuk platform non-Windows di .NET 6 dengan mengatur System.Drawing.EnableUnixSupport
sakelar konfigurasi runtime ke true
dalam file runtimeconfig.json .
runtimeconfig.template.json file templat:
{
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
[appname].runtimeconfig.json file output:
{
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
}
Catatan
System.Drawing namespace layanan:
System.Drawing.Drawing2D namespace layanan:
System.Drawing.Imaging namespace layanan:
System.Drawing.Printing namespace layanan:
System.Drawing.Text namespace layanan:
Umpan balik .NET
.NET adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik:
Acara
Membangun Aplikasi dan Agen AI
17 Mar, 21 - 21 Mar, 10
Bergabunglah dengan seri meetup untuk membangun solusi AI yang dapat diskalakan berdasarkan kasus penggunaan dunia nyata dengan sesama pengembang dan pakar.
Daftar sekarangPelatihan
Modul
Menerapkan penanganan pengecualian di aplikasi konsol C# - Training
Modul ini mengeksplorasi penggunaan pengecualian dan proses penanganan pengecualian dalam aplikasi konsol C#. Aktivitas langsung memberikan pengalaman menerapkan pola penanganan pengecualian untuk berbagai skenario pengkodan.