Remove .NET Framework (WinForms / ASP.NET Web Forms) & Legacy .NET API
- 6 minutes to read
XAF v25.2 ends support for .NET Framework applications (Web Forms and Windows Forms). We removed all .NET Framework modules/APIs and legacy Security System implementations from our source code.
Our focus now is on modern .NET development (ASP.NET Core Blazor, Windows Forms, Web API Service) and on building scalable, multi-tenant/SaaS applications. Migrating from removed modules and APIs to their .NET-based alternatives will help you deliver a better user experience and stronger security. For more information, see the following documents:
- XAF v25.2 Roadmap (see sections titled “Why” and “What’s Next/Main Focus”)
- General Security Considerations
Note
For the complete list of removed assemblies, refer to the Removed-XAF-XPO-Assemblies.docx file attached to the following knowledge base article: T1312589 - XAF - Legacy .NET Framework (WinForms and ASP.NET WebForms) APIs, .NET-based API/Modules, and Security System have been removed from distribution.
How to Update Existing Apps
Migration from XAF Windows Forms/ASP.NET Web Forms (.NET Framework) to Windows Forms/ASP.NET Core Blazor (.NET)
Follow our migration guidelines:
- Port an Existing XAF Application to .NET
- Reuse an XAF Shared Module between .NET Framework and .NET Applications
- Target Multiple .NET Platforms in a Single XAF Shared Module Project
- Share Code Between Legacy .NET Framework and Modern .NET Apps
Note
- There are many standard Microsoft .NET Framework APIs that are not available in .NET or ASP.NET Core. For more information, review public community resources like Microsoft Learn | Overview of upgrading .NET apps. This consulting is outside the scope of our support service.
- If you work with XAF versions prior to v25.2 and develop apps for both .NET Framework and .NET/ASP.NET Core Blazor, configure .NET multi-targeting in v25.1 or older (in v25.2 it is not possible due to the removed .NET Framework assemblies).
- Understanding of Microsoft platforms (.NET, .NET Core, ASP.NET Core, ASP.NET Core Blazor) is a prerequisite for XAF ASP.NET Core Blazor development (you cannot follow this migration guide without this framework knowledge). Review the following articles for additional information: Frequently Asked Questions - ASP.NET Core Blazor UI (FAQ) and Microsoft Learn | ASP.NET Core Blazor.
Use the New “DevExpress v25.2 Template Kit”
The legacy Solution Wizard no longer allows you to create new XAF project and item templates. The new Template Kit is now a part of the Unified Component Installer.
To access the DevExpress 25.2 Template Kit, select File → New → Project… and Add | New Item… or Add | Class… in Visual Studio 2022+. For more information, refer to the following help topic: Template Kit.

Note
The new Template Kit also supports Rider and VS Code.
Legacy and Redundant XAF Windows Forms Modules (.NET)
Pivot Chart (aka Analysis) and KPI Modules
We removed the following XAF Windows Forms (.NET) modules, because the Dashboards Module handles many data analytics use-cases much better as we mentioned in the following article: XAF - 2021 Roadmap (Cross-Platform .NET App UI and Security API).
- DevExpress.ExpressApp.PivotChart (PivotChartModuleBase)
- DevExpress.ExpressApp.PivotChart.Win (PivotChartWindowsFormsModule)
- DevExpress.ExpressApp.Kpi (KpiModule )
Script Recorder Module (a part of EasyTest)
We removed the following XAF Windows Forms (.NET) modules, because functional/e2e tests with xUnit and C# are easier to implement and maintain (as we first described in 2022).
- DevExpress.ExpressApp.ScriptRecorder (ScriptRecorderModuleBase )
- DevExpress.ExpressApp.ScriptRecorder.Win (ScriptRecorderWindowsFormsModule)
Note
You can still run and debug .ets files with the TestExecutor utility. We also maintain and improve our EasyTest engine and recommend it to customers (to maintain high quality of their XAF UI-based apps). Internally, we have multiple XAF functional tests, and use xUnit/C#-based functional tests for any new XAF development (instead of .ets files generated by the Script Recorder).
Legacy Entity Framework 6 (EF 6) Support
We removed the following EF 6-based packages:
- DevExpress.ExpressApp.EF6
- DevExpress.ExpressApp.Security.EF6
- DevExpress.Persistent.BaseImpl.EF6
For more information, refer to the following help topics:
- Porting from EF 6 to EF Core
- Business Model Design with Entity Framework Core (as recommended since 2019).
Legacy Security System Implementations
Note
For the complete list of removed APIs grouped by assembly, refer to the Removed-Security-API.txt file attached to the following knowledge base article: T1312589 - XAF - Legacy .NET Framework (WinForms and ASP.NET WebForms) APIs, .NET-based API/Modules, and Security System have been removed from distribution.
SecuritySystemUser, SecuritySystemRole, and Related API
Migrate your SecuritySystemXXX classes and data to PermissionPolicyUser, PermissionPolicyRole, and related API as described in the following knowledge base article: How to upgrade an existing project to the Allow/Deny permission policy (migrate to PermissionPolicyUser and PermissionPolicyRole).
XPO Middle-Tier Security for WCF
- Remove any code related to the deprecated WCF client and server (
WcfSecuredClient,WcfDataServerHelper,MiddleTierSerializableObjectLayerClient,SerializablePermissionRequest,SecuredDataServer,ClientInfo, and so on). - Create an ASP.NET Core-based project as outlined in the following help topic: Create a .NET Application with the XPO Middle Tier Security.
Legacy Password Hashing Algorithms
Remove any mentions of the outdated SupportLegacySha512 and EnableRfc2898 properties of the DevExpress.Persistent.Base.PasswordCryptographer class in your code as recommended in the following knowledge base article: XAF’s Security Module uses more secure and FIPS-compliant password generation algorithms.
Certain DevExpress.Persistent.Base / DevExpress.Persistent.BaseImpl.Xpo API
Note
For the complete list of removed APIs grouped by assembly, refer to Removed-BaseImpl-Base-DC-API.txt and Removed-DC-API.txt attached to the following knowledge base article: T1312589 - XAF - Legacy .NET Framework (WinForms and ASP.NET WebForms) APIs, .NET-based API/Modules, and Security System have been removed from distribution.
XPO Demo Classes and Helpers from the DevExpress.Persistent.BaseImpl Namespace
We removed multiple XPO-based demo classes under the DevExpress.Persistent.BaseImpl namespace:
Address,Country,StateOrganization,Party,Person,PhoneNumber,Note,TaskPhoneType,PropertyBag,PropertyBagDescriptor,PropertyDescriptor,PropertyValue
DevExpress.Persistent.BaseImpl.Xpo now contains only persistent classes required for the operation of XAF-specific modules (for example, PermissionPolicyUser, ReportData). For more information, refer to the following help topic: Built-in Business Classes & Interfaces.
Our motivation was the same as for the DevExpress.Persistent.BaseImpl.EFCore library in the past. Additionally, we aim to avoid naming and UI/layout conflicts with existing customer classes.
To see the source code of these removed demo classes, download and install v25.1 with the Source & Symbols installer option, and navigate to c:\Program Files\DevExpress 25.1\Components\Sources\DevExpress.Persistent\DevExpress.Persistent.BaseImpl.Xpo\.
Demo Class UI/Layout Settings (aka the DevExpress.ExpressApp.Objects Module)
The Project Converter automatically removes the DevExpress.ExpressApp.Objects project and code references, so no action is required in most cases. UI and layout settings for built-in persistent classes now ship with DevExpress.Persistent.BaseImpl.Xpo and DevExpress.Persistent.BaseImpl.EFCore packages.
Domain Component (DC) Interfaces
Remove any DCBaseObject mentions and migrate DC interfaces to pure XPO classes (as we first recommended in 2016).
Note
DC interfaces are different from non-persistent classes marked with the DomainComponentAttribute that is still a valid/supported API.
Legacy XPO Sequence Number Generators
Remove any mentions of the DistributedIdGeneratorHelper, OidGenerator, and ServerPrefix classes from the DevExpress.Persistent.BaseImpl namespace and follow Auto-Generate Unique Number Sequence instead.