Narity Reporterpreview

Migration guide

Move Crystal Reports from .NET Framework to modern .NET.

Keep your existing report files. Replace the application code that loads data and renders PDFs.

Keep your report files and data. Replace the rendering calls with the Reporter API, then compare PDFs before switching production.

Why the runtime matters

A reporting dependency can hold back an otherwise ready application migration. SAP Crystal Reports for Visual Studio uses .NET Framework-specific components. SAP's Crystal Solutions FAQ, section D describes its .NET Framework dependency and lack of modern .NET support. Reviewed October 7, 2026.

Reporter is an independent implementation for .NET 10. It reads Crystal Reports .rpt files directly and renders PDF without installing the SAP runtime.

Reporter uses its own API. It is not a binary replacement for CrystalDecisions assemblies. Keep report designs where compatible, and change the code that loads, binds, and renders them.

1. Render a PDF in a fresh .NET 10 application

Start with Render your first PDF. It includes package installation, complete C# code, a fictional sample, and the expected output.

Create an account, verify your email, and start the 30-day evaluation. Download the SDK from your account. Its NuGet package includes your evaluation licence.

Then pass your own report, saved with data, to the same application. Compare its PDF with the output from Crystal.

2. Replace the rendering integration

Move one report at a time. Keep the same inputs and reference output while changing the rendering code.

Application responsibilities and Reporter APIs
Load the reportReportModelBuilder.FromRpt reads the existing file into Reporter's model.
Resolve parametersParameterBinding.Resolve binds your application's values. Use saved values only when reproducing a saved run.
Provide dataReportDataBinder.Bind binds saved rows, a database row source, or rows supplied by your application.
Create the PDFPaginator.Paginate lays out pages. PdfRenderer.RenderToFile writes the PDF.

The integration examples cover saved data, database providers, and an ASP.NET Core PDF endpoint.

3. Choose how the report gets its data

  • Saved data: reproduce a saved report before adding database access. These rows are a snapshot.
  • Database tables: use the packaged PostgreSQL, Oracle, or SQLite provider with its driver package.
  • SQL Command reports: execute the query in your application and supply matching rows. Reporter does not execute stored Command SQL.

Follow the provider setup or supplied-row example. Preserve parameter names, field aliases, and data types.

4. Compare output before switching production

Reporter is in preview. Successful parsing does not establish identical output for every report.

  • Use identical rows and parameter values for both renders.
  • Compare page counts, totals, groups, and subreport content.
  • Check fonts, wrapping, pagination, charts, and conditional formatting.
  • Include empty results, long text, null values, and multipage reports.
  • Repeat the comparison on your deployment operating system.

Check the current limitations when a report differs. Keep your existing rendering path until the reports you need pass your checks.

What about .NET Core, .NET 8, or .NET 9?

The current Reporter SDK targets net10.0. It cannot be referenced directly from .NET Framework, .NET Core, .NET 8, or .NET 9 applications.

We can build a bespoke version of Reporter targeting your required runtime. Contact us to discuss your application.

You can also retarget the reporting application to .NET 10. A separate .NET 10 reporting service is another option; your team owns that integration.

Reporter renders reports; it does not provide a Crystal report designer or replace the Crystal Server platform.