Features
All Features Report Designer Dashboards Self-Service BI Scheduling & Exports Advanced Filtering AI Assistant & Live Preview Data Visualization
Use Cases
Accounting & Finance HR & People Analytics SaaS Platforms Enterprise BI All Use Cases
Industries
All Industries Fintech Healthcare Banking & Finance Education Ecommerce & Retail Travel & Hospitality Real Estate
Migrate & Compare
Compare Alternatives From Izenda From SSRS From ExagoBI Migration Help
Company
About Pricing FAQ How It Works Roadmap Community Case Studies Contact Us Schedule a Demo
Sign In Schedule Demo Free Trial
Technical Guide

RDLC / ReportViewer Alternative for .NET Core and .NET 8

RDLC reports and the ReportViewer control were the embedded reporting standard for .NET Framework applications. Microsoft never ported either of them to .NET Core. If you’re upgrading a legacy app to .NET 8 — or building anything on modern .NET — you need a different approach. This guide explains why RDLC is a dead end on .NET Core, what the available workarounds look like (and why most of them are risky), and what purpose-built alternatives exist for .NET developers today.

March 2026 13 min read RDLC, ReportViewer, .NET Core, .NET 8, Migration

What RDLC Reports and ReportViewer Actually Are

RDLC stands for Report Definition Language Client-side. It is Microsoft’s XML-based format for defining reports that render locally within an application — as opposed to RDL reports, which are hosted on a dedicated SQL Server Reporting Services (SSRS) server. RDLC reports were designed to give .NET Framework developers a way to embed tabular reports, charts, and printed output directly inside their web or Windows applications without standing up an entire SSRS infrastructure.

The companion piece is the ReportViewer control — a UI widget that rendered RDLC reports inside ASP.NET WebForms pages or WinForms applications. You dropped a ReportViewer control onto a page, pointed it at an .rdlc file, bound a data source, and you had a report. For its era, it was practical and widely adopted. Microsoft shipped both as part of Visual Studio and the .NET Framework runtime, so for teams already in the Microsoft ecosystem there was essentially zero additional cost.

The widespread adoption of both created a large installed base. Today, hundreds of thousands of .NET applications contain .rdlc files. Many of those applications are now on the upgrade path to .NET 8, .NET 9, and beyond — and their developers are discovering a painful reality.

Why RDLC Breaks on .NET Core and .NET 8

Microsoft built .NET Core from scratch as a cross-platform, cloud-native replacement for .NET Framework. The design goals were different: smaller binaries, faster startup, Linux compatibility, Docker support, no dependency on Windows-specific APIs. Many classic .NET Framework technologies did not make the cut. RDLC and ReportViewer were among them.

Microsoft’s Official Position

There is no Microsoft-supported ReportViewer or RDLC rendering engine for .NET Core, .NET 5, .NET 6, .NET 7, .NET 8, or .NET 9. This is not a temporary gap — it is a deliberate product decision. The Microsoft Q&A forums and GitHub issues consistently confirm this with responses like “there are currently no plans to port ReportViewer to .NET Core.”

The legacy Microsoft.Reporting.WebForms NuGet package targets .NET Framework 4.x only. It cannot be loaded by a .NET Core or .NET 8 runtime.

This creates concrete, immediate problems when you try to modernize a .NET Framework application:

  • Build failures. The ReportViewer NuGet package will not resolve on .NET 8 targets. Your solution will not compile.
  • Missing runtime dependencies. RDLC rendering depends on vbc.exe (the VB.NET compiler) to compile expression code at report render time. That binary does not exist in .NET 8 runtime environments, especially on Linux containers.
  • No Linux / Docker support. Even if you patch around the build errors, RDLC rendering calls Windows-only GDI+ APIs for image rendering and pagination. Containerized .NET 8 workloads running on Linux or Alpine images will crash at runtime.
  • No Blazor support. The ReportViewer control is a classic WebForms / ASP.NET MVC HTML control. It does not work in Blazor Server or Blazor WebAssembly applications. There is no Blazor-compatible RDLC viewer from Microsoft.
  • No .NET MAUI support. If you’re migrating WinForms apps to .NET MAUI, the WinForms ReportViewer is unavailable on cross-platform targets.

The net result: the moment you change your project target framework from net48 to net8.0, every .rdlc file and every call to ReportViewer becomes a build or runtime error.

Why Not Just Stay on .NET Framework?

Some teams try to kick the can down the road by keeping their application on .NET Framework 4.8 so they can keep using RDLC. This approach has a limited shelf life:

  • .NET Framework 4.8 is in maintenance mode. It receives security patches but no new features or performance improvements.
  • New .NET ecosystem libraries increasingly target .NET 6+ only. As you take on new dependencies, .NET Framework compatibility gaps grow.
  • Cloud providers and container runtimes are optimized for .NET 8+. .NET Framework on Linux is unsupported entirely.
  • Microsoft has said publicly that .NET Framework will not be the future platform for .NET development. .NET 8 is the strategic investment.

Staying on .NET Framework to preserve RDLC is a bet that your application will never need to modernize. For most teams, that bet will not pay off.

The Unofficial Workarounds (And Why They Are Risky)

Because RDLC is so widely used, the community has built unofficial workarounds. The most prominent is reportviewercore by Lukasz Kosson, a GitHub project that patches the Microsoft ReportViewer binaries to remove .NET Framework dependencies and run on .NET Core. It’s genuinely impressive engineering. But before you build a production application on it, understand what you’re accepting:

Unofficial and Unsupported

This is a community patch of a Microsoft binary. Microsoft provides no support for it. If a .NET 8 runtime update breaks it, you are on your own.

Known Functionality Gaps

The project explicitly documents features that are missing or broken: custom assemblies, certain expression types, Windows-only rendering paths, and multi-value parameters in some scenarios.

Patched Binaries

The project redistributes patched Microsoft binaries. License compliance is a grey area. Some corporate legal teams will not approve shipping it in commercial products.

Frozen Architecture

Even when it works, you inherit all of RDLC’s design constraints: developer-only report design, no self-service, no drag-and-drop builder, no modern chart types, no multi-tenancy.

Third-party commercial vendors — Telerik, DevExpress, FastReport, Stimulsoft — also offer their own RDLC-like report rendering on .NET 8. These are genuinely supported options, but they carry per-developer licensing costs of $500–$2,000 per seat and require developers to design every report. End users cannot create or modify reports on their own.

The unofficial workaround buys you time. Commercial vendor RDLC replacements give you support. Neither solves the underlying architectural problem: RDLC was designed for a different era of software and does not fit modern SaaS or multi-tenant embedded reporting requirements.

What to Look for in an RDLC Alternative

When you are choosing a replacement for RDLC and ReportViewer, you have an opportunity to upgrade your entire reporting architecture — not just swap one renderer for another. Here is what a genuinely modern embedded reporting solution should offer for .NET teams:

Native .NET 8 Support

Installs as a NuGet package. Targets .NET 6, 7, 8, and beyond natively. No .NET Framework compatibility layers, no patched binaries.

Self-Service Report Building

End users should be able to build and modify reports without developer involvement. RDLC required a developer to write or edit every .rdlc file. That bottleneck is avoidable.

Multi-Tenant and Row-Level Security

SaaS applications need tenant isolation and per-user data filtering built into the reporting layer. RDLC had none of this out of the box.

No External Infrastructure

Runs embedded inside your .NET application. No separate report server, no RDL deploy pipeline, no separate maintenance window.

Modern Interactive Charts

RDLC charts are static and dated. Modern users expect interactive dashboards with drill-down, live filters, and real-time refresh.

Flat, Predictable Pricing

RDLC was free, but its replacements often charge per developer or per user. For SaaS teams, per-seat licensing destroys margins as you scale. Look for flat annual pricing.

Dotnet Report: Purpose-Built Embedded Reporting for .NET

Dotnet Report was built specifically for .NET development teams who need to embed reporting inside their applications. It is not a port of a legacy tool — it was designed from the ground up for .NET Core and modern SaaS architectures.

Setup in 30 Minutes

Add one NuGet package to your .NET project:

dotnet add package dotnetreport

Configure two API endpoints to handle data access and schema discovery. Connect your database (SQL Server, MySQL, PostgreSQL, Oracle, or DB2 — the same database your RDLC reports were querying). Deploy with your application. That’s it. No separate server, no XML report definition files to compile, no vbc.exe dependency.

End-User Report Builder

Unlike RDLC, where developers design every report by writing XML or using a Visual Studio designer, Dotnet Report ships a drag-and-drop report builder that your end users can access directly inside your application. They select tables, add columns, apply filters, choose chart types, and save reports — without writing a line of SQL or touching a developer-facing tool.

This shifts your entire reporting workflow. Instead of developers fielding report requests every time a user wants a new filter or a different column, users build what they need themselves. Developers retain control of what data is accessible; users control how they view it.

What You Get

  • Drag-and-drop report builder. Visual report design with no SQL required. Add columns, apply filters, group data, add calculated fields.
  • 12+ interactive chart types. Line, bar, pie, area, scatter, bubble, gauge, funnel, waterfall, heatmap, and more. Charts are interactive, not static images.
  • Live dashboards. Drag report widgets onto a dashboard canvas. Resize, reorder, and pin dashboards to home screens.
  • Multi-tenant by design. Built-in tenant isolation for SaaS platforms. Each tenant gets separate data, reports, and permissions with one configuration.
  • Row-level security. Apply forced filters at the user or tenant level. Control exactly which data rows each user can see, enforced server-side.
  • Scheduled reports and email delivery. Cron-based scheduling with automatic PDF, Excel, Word, and CSV delivery via email.
  • REST API. A full API for programmatic report generation, embedding specific reports in custom pages, and integrating with your own workflows.
  • AI-powered queries. Smart Query (beta) lets users describe what they want in plain English and generates the report automatically.
  • Open-source React frontend. White-label the report builder UI. Customize the look, restrict features, or build on top of it for advanced scenarios.
  • Works on Linux and Docker. No Windows-only dependencies. Deploy on Azure App Service, AWS, GCP, Docker, or Kubernetes without modification.

Flat Pricing That Does Not Scale Against You

RDLC was free because Microsoft bundled it. When you replace it, cost is a legitimate concern. Most commercial replacements charge per developer seat — $500 to $2,000 per seat per year, with runtime royalties on top in some cases. For a team of 10 developers, that is $5,000 to $20,000 a year before you ship a single report to a user.

Why Flat Pricing Matters for SaaS Teams

Dotnet Report uses flat annual licensing per application, not per developer seat and not per end user. You pay once for unlimited developers, unlimited end users, and unlimited reports. As you add customers to your SaaS platform, your reporting cost does not increase. This is the model that makes sense for embedded reporting in commercial applications.

RDLC vs. Dotnet Report: Feature Comparison

Here’s how RDLC/ReportViewer and Dotnet Report compare across the capabilities that matter for modern .NET applications:

Capability RDLC / ReportViewer Dotnet Report
.NET Core / .NET 8+ support Not supported Full native support
Linux / Docker support Windows-only GDI+ deps Fully cross-platform
Blazor support WebForms only Blazor compatible
End-user report builder Developers only Drag-and-drop builder
Interactive chartsStatic images 12+ interactive chart types
Live dashboards Not available Drag-and-drop dashboard builder
Multi-tenancy Manual implementation Built-in tenant isolation
Row-level securityManual (per-report filtering) Forced filters, server-enforced
Scheduled delivery Not available (client-side rendering) Cron + email (PDF, Excel, Word)
REST API No API layer Full REST API
AI query generation No Smart Query (Beta)
Pricing modelFree (bundled with VS) Flat annual (unlimited users)
Active development Abandoned Continuous updates
Setup complexityComplex (WebForms control) 30 minutes (NuGet)

The primary tradeoff is that RDLC was free and Dotnet Report is not. But RDLC is also no longer an option on .NET 8 unless you accept an unsupported workaround. When you factor in developer time to maintain unofficial patches, the inability to deploy on Linux, and the lack of self-service reporting for end users, a purpose-built alternative typically costs less in total than the workaround.

How to Migrate from RDLC Reports (Step by Step)

Moving from RDLC to Dotnet Report typically takes 2–3 weeks for a mid-sized application with 10–30 reports. Here is the process that works reliably:

Step 1: Inventory Your .RDLC Files

Find every .rdlc file in your solution. Document the data sources each one connects to, the columns displayed, any calculated fields, and the parameters users can control. This inventory is your migration checklist.

Also identify which reports are actively used. Most applications have a long tail of reports that were built once and are now essentially dormant. Focus migration effort on reports with real usage.

Step 2: Map Your Data Sources

RDLC reports bind to typed datasets or database queries. Identify the underlying tables and views your reports query. Dotnet Report connects to the same database — you are not rebuilding your data model, you are rebuilding the report presentation layer.

Step 3: Install Dotnet Report and Connect Your Database

Add the NuGet package to your .NET 8 project:

dotnet add package dotnetreport

Configure the two API endpoints and connect to your database. Verify that Dotnet Report can discover your schema — the same tables and views your RDLC files were querying. This is typically a 20–30 minute setup.

Step 4: Recreate Reports Using the Drag-and-Drop Builder

Work through your inventory, starting with the most-used reports. Using the report builder, select the tables and columns that match your original RDLC output. Add filters, calculated fields, and groupings. For each RDLC report that had a parameter (a date range, a customer ID, a status filter), create the equivalent filter in Dotnet Report.

Most simple to mid-complexity RDLC reports can be recreated in under 30 minutes each. Complex reports with deeply nested groupings or custom expression code take longer, but the end result is a report your users can modify themselves — a significant upgrade from an RDLC file that only developers could touch.

Step 5: Configure Security

RDLC performed security through your ASP.NET authentication layer — you controlled which users could access which report pages. Dotnet Report adds an additional layer: row-level security through forced filters, and role-based report access control.

Configure which roles can see which reports in the admin panel. If your application is multi-tenant, configure tenant isolation — each tenant gets their own workspace and cannot see another tenant’s reports or data.

Step 6: Validate Data Accuracy and Cut Over

Run Dotnet Report alongside the old RDLC setup for a validation period. Have power users verify that the data in the new reports matches what RDLC was producing. Once you have sign-off on the key reports, remove the RDLC dependencies from your project and complete the .NET 8 upgrade.

Pro Tip: Use This as a Reporting Refresh

RDLC migrations are an opportunity to revisit what reports your users actually need. Rather than rebuilding every old RDLC file one-for-one, talk to your users about which reports they rely on and what information they wish they had. Teams that do this come out with a smaller set of reports that are more useful than the full legacy inventory.

Common Questions

Can I import my existing .RDLC files into Dotnet Report?

No, there is no automatic RDLC import. RDLC is a Microsoft-proprietary XML format that describes report layout in terms of the ReportViewer rendering engine. Dotnet Report uses a different architecture with a web-based report builder. You recreate the report logic through the drag-and-drop UI rather than importing the file. For most reports, this takes 15–30 minutes and results in a report that’s easier to maintain than the original RDLC.

What about reportviewercore on GitHub — should I just use that?

For short-term needs or internal tooling, it’s a viable temporary bridge. For production SaaS applications or any long-term investment, it carries meaningful risks: no official support, known feature gaps, license compliance uncertainty, and no improvement in the underlying RDLC architecture. If you are investing effort in a migration anyway, investing in a purpose-built alternative yields better long-term outcomes.

My .RDLC reports print formatted documents (invoices, letters). Can Dotnet Report handle that?

Dotnet Report focuses on data analysis, tabular reporting, and dashboards. If your RDLC usage is primarily precise print layout — pixel-perfect invoices, compliance forms, or documents with fixed column widths — that is a print/document generation use case. For those scenarios, a document generation library is a better fit than an embedded BI tool. If your RDLC reports are primarily data output (tables, charts, filters), Dotnet Report covers that fully.

Does Dotnet Report work with Blazor?

Yes. Dotnet Report’s frontend is a React application embedded via iframe or component. It works in Blazor Server and Blazor WebAssembly applications. The backend APIs are standard .NET minimal API endpoints that work in any .NET 8 project type.

What databases does Dotnet Report support?

SQL Server, MySQL, PostgreSQL, Oracle, and DB2. If your RDLC reports were querying one of these databases (which covers the vast majority of RDLC implementations), Dotnet Report can connect to the same database directly.

Can I restrict what data each user can see, like I did with my RDLC data sources?

Yes. Dotnet Report has two mechanisms for data access control. Schema-level control lets you specify which tables and columns are accessible at all. Row-level security (forced filters) lets you inject a SQL filter at query time based on the current user’s identity — for example, always appending WHERE TenantId = @CurrentTenantId to every query, regardless of what the user requests.

How is Dotnet Report priced compared to RDLC workarounds?

RDLC workarounds range from free (reportviewercore) to per-developer commercial alternatives ($500–$2,000 per seat). Dotnet Report uses flat annual licensing per application. For a team shipping a commercial .NET application to multiple customers, the flat model is almost always less expensive than per-developer or per-user alternatives at scale.

Will my team need significant retraining?

The development team needs one day to set up and understand the integration. End users who previously consumed RDLC-rendered reports in your application typically adapt to the self-service builder in an hour or two — most find it significantly easier than requesting changes through a developer.

Next Steps

If you have an application with RDLC reports and are upgrading to .NET 8, here are three ways to get started:

Replace RDLC on .NET 8 — Without Months of Rework

Dotnet Report installs as a NuGet package, connects to your existing database, and gives your users a self-service report builder. Most teams are up and running in under 30 minutes.