Migration Guide

SSRS to .NET Core: Your 3 Migration Options Compared

Your .NET 10 migration is blocked by a reporting control that Microsoft quietly abandoned — and their official replacement costs $24 per user per month. If you're running RDLC reports with ReportViewer, you've hit a wall: no .NET Core support, no Linux, no Docker. This guide examines your three realistic options.

The ReportViewer Problem

The Microsoft ReportViewer control has fundamental limitations that block modern .NET adoption:

Platform Constraints

  • Requires Windows Server
  • Requires .NET Framework 4.x
  • No .NET 8, 9, or 10 support
  • Cannot run in Linux containers
  • Cannot run in Docker or Kubernetes

Infrastructure Costs

  • Windows Server licensing
  • SQL Server licensing (for full SSRS)
  • Dedicated Windows infrastructure
  • In an increasingly Linux-first world

Technical Debt

  • No active development from Microsoft
  • Security patches only, no new features
  • Incompatible with modern CI/CD
  • Forces legacy .NET Framework codebases

Microsoft's strategic direction is clear: they want enterprises on Power BI. The on-premises SSRS product receives minimal investment while Power BI gets continuous feature updates.

1

Stay on SSRS (Status Quo)

The simplest option is to change nothing. This only makes sense if your reports aren't business-critical, you have no plans to modernize to .NET 8+, and your application has a defined end-of-life.

The upside is zero migration effort. The downside is accumulating technical debt, no path to containerization, and eventual obsolescence when Microsoft ends support.

Verdict: Acceptable for legacy applications with a sunset date. Not viable for anything under active development.

2

Power BI Paginated Reports

Microsoft's official migration path uses the same RDL/RDLC format. This makes sense if you're already invested in the Microsoft 365/Azure ecosystem, have a small number of report consumers, and data residency in Microsoft's cloud is acceptable.

Pricing Model

Power BI Paginated Reports requires either Power BI Premium Per User (PPU) at $24/user/month ($288/year per user), or Microsoft Fabric capacity starting at approximately $5,000/month for F64.

Power BI Paginated Reports cost at scale
Team Size Monthly Cost Annual Cost
10 users $240 $2,880
25 users $600 $7,200
50 users $1,200 $14,400
100 users $2,400 $28,800
300+ users $7,200+ $86,400+

Pros

  • Microsoft supported
  • Familiar RDLC/RDL format
  • Integrated with Power BI ecosystem
  • Cloud-hosted (no infrastructure to manage)

Cons

  • Per-user pricing scales linearly
  • Data must reside in Microsoft's cloud
  • Requires internet connectivity
  • Cannot run on-premises or in your own cloud
  • Vendor lock-in to Microsoft's pricing decisions

Verdict: Suitable for organizations with small user bases who are already committed to Microsoft's cloud ecosystem. Becomes expensive at scale.

3

Self-Hosted Cross-Platform Library

The third option is replacing ReportViewer with a cross-platform .NET library that renders RDLC reports natively on any platform. This makes sense when you need Linux, Docker, or Kubernetes support, you're migrating to .NET 8+, data must stay within your infrastructure, and you want predictable non-per-user pricing.

The Hidden Trap: Most Libraries Require Rewrites

Most third-party reporting libraries (FastReport, Stimulsoft, DevExpress, Telerik) use proprietary report formats. Migrating means rewriting every single report from scratch. For an organization with 50+ RDLC files built over years, that's weeks or months of work — and the risk of introducing bugs in battle-tested reports.

Evaluation Checklist

  • 100% RDLC compatibility — Can you drop in existing .rdlc files without modification?
  • Cross-platform support — Does it run on Linux, macOS, and Windows?
  • No native dependencies — Does it require GDI+, libgdiplus, or other platform-specific libraries?
  • .NET 8+ support — Is it actively maintained for current .NET versions?
  • Export formats — Does it support PDF, Excel, Word, and image output?
  • Licensing model — Per-developer, per-server, or per-company?

Self-Hosted Options Compared

Comparison of self-hosted RDLC reporting libraries
Capability SSRS2 MS ReportViewer FastReport Stimulsoft
RDLC Compatibility 100% 100% Requires rewrite Requires rewrite
Linux & Docker Yes No Yes Yes
.NET 8/9/10 Yes No Yes Yes
Zero Migration (use existing .rdlc) Yes Yes No No
No GDI+ / native deps required Yes No No No

Verdict: Best option for organizations migrating to modern .NET, containerizing applications, or with large user bases where per-user pricing is prohibitive.

Typical Migration Timeline

A typical migration scenario for a mid-market company with 80 RDLC reports built over years, migrating from Windows Server / .NET Framework 4.8 to Kubernetes:

SSRS to .NET Core migration timeline
Phase Duration Activities
Evaluation 1-2 weeks Test 10-15 critical reports, compare output to existing ReportViewer
Pilot 2-4 weeks Migrate one module to production, validate with real users
Full Migration 4-8 weeks Remaining reports, CI/CD pipeline integration, performance benchmarking
Parallel Run 2-4 weeks Side-by-side validation, output comparison, final sign-off

Key Validation Steps

  • Report inventory — Document all reports, their complexity, and usage frequency
  • Compatibility testing — Render each report and compare output to existing ReportViewer output
  • Performance benchmarking — Measure render times for high-volume reports
  • Export validation — Verify PDF, Excel, and Word exports match expected output
  • Integration testing — Test parameter passing, data source binding, and subreports

Common Issues to Check

  • Custom fonts — Ensure they're available on Linux (fonts-liberation package in Docker)
  • Image paths — May need adjustment for new file system
  • Expression compatibility — Test complex expressions thoroughly
  • Subreport references — Verify paths resolve correctly

5-Year Cost Comparison

For a company with $5M annual revenue and 75 report users:

5-year total cost comparison: SSRS vs Power BI vs SSRS2
Solution Year 1 Year 2-5 (each) 5-Year Total
Stay on SSRS $0* $0* $0*
Power BI PPU (75 users) $21,600 $21,600 $108,000
SSRS2 Growth tier $5,500 $5,500 $27,500

* Excludes Windows Server licensing, SQL Server licensing, and opportunity cost of not modernizing.

Key Observations

  • Power BI PPU costs scale linearly with users — add 10 users, add $2,880/year
  • SSRS2 pricing is based on company revenue, not user count
  • At 75 users, self-hosted is nearly 4x cheaper than Power BI
  • The break-even point is around 20 users; above that, self-hosted wins
  • Annual savings at 75 users: $16,100 (74% less than Power BI)

SSRS2 Pricing

Revenue-based annual licensing. Unlimited developers, unlimited applications, unlimited report renders.

SSRS2 annual license pricing by company revenue
Company Revenue Annual License
Under $1M $2,000/year
$1M - $10M $5,500/year
$10M - $50M $12,000/year
$50M - $250M $25,000/year
$250M+ $50,000/year

Quick Start: 5 Lines of Code

using Ssrs2.Reporting;

var report = new LocalReport();
report.ReportPath = "Invoice.rdlc";
report.DataSources.Add(new ReportDataSource("InvoiceData", invoiceList));
byte[] pdf = report.Render("PDF");
File.WriteAllBytes("invoice.pdf", pdf);
// Works on Linux, macOS, Windows, Docker — same code everywhere

Install: dotnet add package SSRS2.NETCore

Docker Deployment

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
RUN apt-get update && apt-get install -y fonts-liberation && rm -rf /var/lib/apt/lists/*

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
COPY . /src
RUN dotnet publish /src -c Release -o /app

FROM base
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyReportApp.dll"]
# RDLC reports render natively on Linux — no GDI+, no libgdiplus

Frequently Asked Questions

Can I run RDLC reports on Linux?

Yes. SSRS2 uses SkiaSharp for cross-platform rendering, allowing RDLC reports to run natively on Linux, macOS, Docker, and Kubernetes without GDI+ or libgdiplus dependencies. Install via NuGet: dotnet add package SSRS2.NETCore

Does SSRS2 require rewriting existing RDLC reports?

No. SSRS2 is 100% RDLC compatible. Your existing .rdlc files work without modification. Unlike FastReport or Stimulsoft which use proprietary formats and require report rewrites, SSRS2 is a drop-in replacement for Microsoft ReportViewer.

How much does Power BI Paginated Reports cost?

Power BI Paginated Reports requires Power BI Premium Per User (PPU) at $24/user/month ($288/year per user), or Microsoft Fabric capacity starting at approximately $5,000/month. For 75 users, that's $21,600/year.

What's the migration timeline from SSRS to .NET Core?

A typical migration takes 10-18 weeks: 1-2 weeks evaluation, 2-4 weeks pilot, 4-8 weeks full migration, and 2-4 weeks parallel run for validation.

Does SSRS2 need GDI+ or libgdiplus?

No. SSRS2 uses SkiaSharp for all rendering, eliminating the need for GDI+, libgdiplus, or any platform-specific native libraries. It runs on any platform where .NET runs, including Alpine Linux Docker containers.

How does SSRS2 pricing compare to Power BI?

SSRS2 uses revenue-based annual licensing (not per-user). For a company with 75 report users: Power BI PPU costs $21,600/year while SSRS2 Growth tier costs $5,500/year — a 74% saving. The break-even point is approximately 20 users.

Conclusion

SSRS and the ReportViewer control served the .NET ecosystem well for two decades. But the platform has moved on. You have three paths forward:

  1. Stay on SSRS — Acceptable for legacy applications with a defined sunset
  2. Power BI Paginated Reports — Works if you're small, cloud-first, and Microsoft-committed
  3. Self-hosted library — The practical choice for modern .NET applications at scale

The good news: you don't have to rewrite your reports. Your RDLC files are portable. The right migration tool lets you keep your existing reports and run them anywhere.

This guide is also available on Medium: SSRS to .NET Core: Your 3 Migration Options Compared

Ready to Migrate?

Try SSRS2 with your own RDLC files. Upload a report to our live demo and see it render on Linux in seconds.