Framework on Framework Architecture
FrameworX is literally a framework built on top of .NET. This isn't just using .NET programming languages, it's total integration where platform objects like DateTime tags are actual .NET DateTime objects. This deep integration enables features impossible with traditional SCADA scripting engines.
Different FrameworX components target different .NET flavors so each runs on the right surface: the Designer is a Windows desktop IDE on .NET Framework 4.8, the Runtime is a cross-platform service on modern .NET, and the Kernel and protocol drivers are portable libraries on netstandard 2.0 that load into either host.
Component TFM Summary
Each FrameworX component targets the .NET flavor that best fits its role:
Component | Target Framework | Platforms | Notes |
|---|---|---|---|
Runtime | .NET 10 (10.1.5 and later) | Windows, Linux, Docker | Cross-platform server. Upgrading from 10.1.4 moves the runtime from .NET 8 to .NET 10. |
Designer | .NET Framework 4.8 | Windows only | Engineering IDE. Pre-installed on all supported Windows versions, no extra runtime required to run the Designer. Multi-Platform solutions also need the .NET Desktop Runtime on the Designer machine to compile scripts, see Script Compilation Target below. |
Kernel and drivers | netstandard 2.0 | Any .NET host | Portable libraries loaded by both the Designer and the Runtime, so the same compiled assemblies run everywhere FrameworX runs. |
The split is deliberate: the Designer leverages mature Windows desktop tooling on .NET Framework 4.8, while the Runtime gets the performance, footprint, and cross-platform reach of modern .NET. The portable Kernel keeps both sides aligned on a single object model.
Script Compilation Target
Script Tasks, Script Classes, and Display code-behind are compiled by the Designer, on the Windows machine where the Designer runs. For server code, the compilation target follows the Target Platform of the solution, not the framework the Designer itself runs on. Display code follows the client that runs it, see Display Code-Behind and Client Code below.
Solution Target Platform | Scripts compile to | C# language version | Required on the Designer machine |
|---|---|---|---|
Windows | .NET Framework 4.8 | C# 7.3 | Nothing extra. .NET Framework 4.8 is included in Windows. |
Multi-Platform | .NET 10 (FrameworX 10.1.5 and later) | C# 12 (FrameworX 10.1.5) | The matching cross-platform .NET Desktop Runtime |
This also applies when the Designer is connected to a remote solution server, for example a Multi-Platform solution running on Linux. Compilation still runs on the Designer machine and the server only executes the compiled output, so the matching .NET runtime is required on both the Designer machine and the server.
The C# language version comes from the compiler included with FrameworX, not from the .NET runtime installed on the machine. For VB.NET, the equivalent levels are VB 15.5 on .NET Framework 4.8 and VB 16.9 on the cross-platform target.
Display Code-Behind and Client Code
Display code-behind and display expressions are compiled once for each client type. The client that runs the code decides the target, in both Windows and Multi-Platform solutions:
Client | Compiles to | C# language version |
|---|---|---|
WPF clients (RichClient, SmartClient) | .NET Framework 4.8 | C# 7.3 |
HTML5 clients | .NET 10 (FrameworX 10.1.5 and later) | C# 12 (FrameworX 10.1.5) |
WPF clients always run on .NET Framework 4.8 and only on Windows, even in Multi-Platform solutions where the server runs on Linux or in Docker. The same code-behind can build for HTML5 and fail for the WPF clients, so code shared by both client types must stay within C# 7.3. Script Classes that run on the WPF clients follow the same rule.
C# 7.3 Compilation Errors
In Windows solutions, and in any code that runs on the WPF clients, newer C# syntax is rejected with error CS8370: Feature '...' is not available in C# 7.3. Common examples are using declarations (using var x = ...;), switch expressions, record types, the range operator (..), default interface methods and top-level statements. Use the C# 7.3 equivalent, for example using (var x = ...) { ... }.
Changing the Target Platform of a solution is a migration, not a setting. It is done in Solution Settings and requires a Build All before the solution runs again.
Multi-platform Deployment Options
| Framework | Platforms | When to Use |
|---|---|---|
| .NET Framework 4.8 | Windows only | • Pre-installed on all Windows • Legacy library compatibility • No additional installation needed • Required for the Designer |
| Modern .NET (cross-platform) | Windows, Linux | • Better performance and memory usage • Cross-platform deployment • Modern framework features • Version matches the FrameworX release: .NET 8 for 10.1.4 and earlier, .NET 10 for 10.1.5 and later • Required for the Runtime |
| Docker | Any with Docker | • Container orchestration • Microservices architecture • Cloud deployment |
Choose the cross-platform runtime as default unless you need specific .NET 4.8 libraries or zero-installation Windows deployment. 10.1.4 and 10.1.5 can be installed side-by-side on the same machine as isolated runtimes.
100% Managed Code Benefits
Being entirely managed code provides industrial-grade reliability:
- Intrinsically safe software - Cannot cause system crashes or memory corruption
- Automatic memory management - No memory leaks from user code
- Process isolation - Scripts run in separate application domains
- 24/7 operation - Garbage collection without stopping the system
This architecture prevents the cascading failures common with native code in industrial systems.
Dynamic Assembly Generation
The built-in code editor doesn't just compile scripts—it creates new .NET assemblies on the fly:
- Runtime component creation - Generate new functionality without restarting
- AI integration capability - MCP tools can create custom methods dynamically
- Solution-level customization - Extend the platform using only built-in tools
- No external dependencies - Complete compiler toolchain included
This unique capability enables advanced features like AI-generated configurations and runtime optimization that would be impossible with traditional scripting.
Native .NET Objects Throughout
Every project element is a native .NET object accessible via IntelliSense:
- Tags, alarms, and datasets as first-class objects
- No temporary variables or type conversions
- Direct data movement between tags and DataTables
- Full object model exposed to scripts
Execution Model
Server-Client Separation
The platform automatically manages execution distribution:
- Server-side - Global logic, data processing, device communication
- Client-side - UI interactions, local calculations, display logic
Developers create sophisticated applications without managing this complexity—the platform handles it transparently.
Tasks, Classes, and Expressions
- Tasks - Scheduled or event-driven processes
- Classes - Reusable .NET libraries and components
- Expressions - One-line calculations with full .NET access
Process Isolation
Each script runs in its own application domain, isolated from the real-time database for maximum security and preventing any script from affecting system stability.
Development Environment
- Languages - Industry-standard C# and VB.NET
- Code translation - Convert between languages anytime
- Full debugging - Breakpoints, step-through, watch windows
- Online changes - Modify and debug while running
Related Concepts
- Object model leveraging .NET types
- In-memory database using .NET collections
- Cross-language capabilities
- Platform Generations - Evolution of the .NET foundation
In this section...