This post includes updated release info on the DevExpress Drawing Graphics Library. As you may know, our Graphics library contains basic cross-platform drawing logic for DevExpress UI components and ships with DevExpress primitives, counterparts to System.Drawing
primitives (Font
, Pen
, Brush
, etc). Thanks to its cross-platform pedigree, you can use products such as DevExpress Reports, Office File API and BI Dashboard in .NET 6/7/8-based applications deployed to non-Windows platforms/environments such as Azure/AWS Unix-based Web Apps, Docker containers and VMs.
We released the DevExpress Drawing Graphics Library to manufacturing (RTM) in our v23.1 release cycle. Refer to the following blog post to learn more about functionality introduced in the RTM release: DevExpress Drawing Library Goes RTM (v23.1).
In our most recent release cycle (v23.2), we extended functionality as follows:
First things First - Let Me Answer a Common Question: Why Does a Reference to System.Drawing.Common Still Exist?
Before I document the most recent enhancements made to our Graphics library, I'd like to address a few questions submitted to us via the DevExpress Support Center:
"I see that the DevExpress.Reporting.Core package depends on System.Drawing.Common. In turn, this library functionality is not available in non-Windows environments such as Linux starting with .NET 6. Do you plan to release a version of the package compatible with .NET 6/7/8?"
"I have found some internal DevExpress references to System.Drawing in the API, but we'd like to remove the reference while migrating to .NET 7. What can I do?"
"While porting my app to the cloud and making it platform-independent, I found references to System.Drawing within the DevExpress.Drawing library. How can I be sure that everything goes smoothly?"
Assembly Structure
While the ultimate goal would be to remove the System.Drawing.Common
reference from various assemblies, a key point to remember is that multiple DevExpress products share a set of so-called "core" assemblies. Core assemblies used across our products, (such as those used in our WinForms product line), naturally include a reference to System.Drawing
so as to handle fonts, images, and printing. For instance, in DevExpress.Data
, you'll find a reference to System.Drawing.Common
>=4.7.2, which is necessary for GDI+ environments like Windows (e.g., in .NET Framework-based WinForms apps with Reporting).
We've improved these core assemblies with each product release, ensuring compatibility across various .NET development platforms like WinForms, ASP.NET, MVC, and Core.
Consider our WinForms Charts library as an example. It shares the same codebase as our XRChart
report control, and the chart rendering algorithms used in our Office File API. To limit impact to DevExpress-powered WinForms apps, we duplicated public APIs (Font
and Image
to DXFont
and DXImage
respectively) and retained references to System.Drawing
.
Future Plans
We don't want to create new headaches for those supporting existing Windows-only apps. As such, we're unlikely to remove the System.Drawing
dependencies within core packages in the future (to maintain compatibility with both .NET Framework and .NET within our codebase).
NuGet Packages
Regarding DevExpress NuGet packages: These are "multi-target" packages, supporting both .NET Framework and .NET 6+ apps simultaneously. Although they include a System.Drawing.Common
reference, this reference doesn't impact unsupported cross-platform scenarios like Linux, macOS, Android, iOS with .NET MAUI, or Blazor WebAssembly. Technically,System.Drawing.Common
v5.0.3 referenced in our assemblies is not used in these scenarios.
Important Notes
It's completely fine to use the
System.Drawing.Primitives
package in your cross-platform apps. Utilizing structures likePointF
andSizeF
won't lead to runtime exceptions.The
System.PlatformNotSupported
exception will occur in non-Windows environments if your .NET app refers toSystem.Drawing.Common
>= 6.0.0. This reference may arise from third-party libraries; for example, adding aSystem.Security.Permissions
package creates aSystem.Drawing.Common
7.0.0 dependency. DevExpress assemblies only referenceSystem.Drawing.Common
5.0.3.
Conclusion
What matters most is that internal tests run smoothly, and feedback from our customers confirms that cross-platform products like DevExpress Reports, Dashboards and Office File API do not throw System.PlatformNotSupported
exceptions in apps deployed to non-Windows environments. These apps produce expected results because we refactored our cross-platform code and successfully migrated to the DevExpress Drawing Graphics library.
Various DevExpress Product Enhancements in our v23.2 Release
Blazor
We updated two Blazor Rich Text Editor public API members to DevExpress.Drawing.Printing.DXPaperKind
primitives:
This change allows you to use this component in non-Windows environments. Refer to the: Rich Text Editor for Blazor - PaperKind members changed their types breaking change for additional information.
Office File API
We introduced a new cross-platform DXSvgImage
type to support SVG graphics across our Word Document API, PDF Document API and Excel Spreadsheet API product line. You can now import, save, export (PDF), and edit Word, Excel and PDF documents with SVG graphics in both Windows and non-Windows environments. Additionally, you have the flexibility to resize, move, and align SVG images within the document.
XAF — Cross-Platform .NET App UI & Web API Service
With our v23.2 update, we eliminated use of System.Drawing.Common
API references across XAF Blazor/WinForms UI and Web API Service. This ensures that our cross-platform libraries function correctly in Linux, Mac, Windows, Android, iOS for .NET 7, .NET 8, and future target frameworks. This simplification also streamlines development and deployment for new UI platforms like .NET MAUI and Blazor WebAssembly with .NET 8, 9, 10, etc. For additional information, please refer to our Breaking Change web page.
Common
You can now convert a
System.Drawing.Image
object instance toDevExpress.Drawing.DXImage
, streamlining the migration process without requiring a change in object types.We've enhanced the functionality of the DXMetafile type, enabling support for a subset of commands for importing and drawing metafiles. This enhancement ensures that charts, gauges, and sparklines in report and Word/Excel/PDF documents are now exported in vector format with optimized performance. Additionally, you have the flexibility to rasterize images generated by these elements and set image DPI during PDF export.
Thanks to internal codebase optimizations, you can now generate report documents in Windows apps using our Skia-based Graphics Engine.
Further Enhancements & Feedback
Next year, we'll be focused on the following areas:
- Additional enhancement to the
DXSvgImage
class: extended number of supported drawing commands. - Cross-platform SVG export for various DevExpress components.
- Performance enhancements (memory consumption, text formatting engine refactoring)
We may also extend the Skia-based drawing engine and apply it to our WinForms/WPF Document Viewer components. Your feedback will drive this decision, so please let us know if this is of value to your enterprise.
Please submit your feedback in the survey below and help us fine tune our 2024 development plans for the DevExpress.Drawing Graphics Library.