[]
ActiveReports supports two distinct configuration formats to ensure flexibility and backward compatibility: the Legacy format (used prior to v20) and the Modern format (introduced in v20). While the Legacy format remains fully supported, the Modern format provides a more modular structure that clearly separates runtime and design-time settings.
Introduced in ActiveReports 20, this format redesigns the ActiveReports.config file to encapsulate settings under dedicated scopes. This structure prevents conflicts with global .NET application settings and improves long-term maintainability. The configuration is organized into two primary sections:
<ActiveReportsConfig>: Defines common runtime configuration shared by all hosting environments.
<ActiveReportsConfig.Desktop>: Defines specific configuration for desktop and design-time environments (WinForms, WPF, and the Desktop Report Designer).
For projects established before v20, ActiveReports continues to support the traditional flat configuration structure. This format relies on standard .NET configuration sections:
<Configuration>
<appSettings>
<Extensions>
ActiveReports allows both formats to coexist within an application to facilitate a smooth migration. However, the system enforces a specific priority order when resolving settings:
Primary: The system first looks for settings defined in the Modern (v20+) format.
Fallback: If a setting is not found in the modern sections, the system falls back to the Legacy configuration.
ActiveReports uses specific discovery mechanisms to locate configuration settings depending on the hosting environment. In all cases, the engine can load either the Modern (v20+) or Legacy format from the discovered file.
When ActiveReports is installed, a global configuration file is placed in the installation folder (e.g., C:\Program Files (x86)\MESCIUS\ActiveReports 20\ActiveReports.config).
This file is automatically read by the Visual Studio Integrated Designer, the Standalone Designer Application, and the Standalone Report Viewer to apply default settings.
For Windows (WinForms) and WPF applications, the engine prioritizes loading settings from a dedicated ActiveReports.config file located in the same directory as the application executable.
Web applications must explicitly point to the configuration file using the ActiveReports Middleware setup. The referenced file can contain either Modern or Legacy configuration definitions.
using GrapeCity.ActiveReports.Aspnetcore.Viewer;
app.UseReportViewer(config =>
{
config.UseConfig(Path.Combine(builder.Environment.ContentRootPath, "Config", "ActiveReports.config"));
});The following sections apply to the Modern (v20+) configuration format.
Many of these sections manage collections of settings (such as data providers or custom items) using standard .NET configuration syntax. You can modify these collections using the following elements:
<add>: Registers a new item. If an item with the same key already exists, this will override it.
<remove>: Removes a specific item (often a default) by its name/key.
<clear>: Removes all currently registered items from the collection, allowing you to define a completely custom set.
The <DataProviders> section manages the data connectors available to the ActiveReports engine. This allows you to register data factories, enable custom data providers, or override the default built-in providers to ensure your application can connect to required data sources.
<ActiveReportsConfig>
<DataProviders>
<!-- Removing the default SQL provider -->
<remove name="SQL" />
<!-- Adding SQLITE providers -->
<add name="SQLITE"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"
displayName="SQLite Provider" />
</DataProviders>
</ActiveReportsConfig>Attribute | Definition |
|---|---|
| The unique logical identifier for the provider. This key is used internally by ActiveReports and referenced in report definitions. |
| The assembly-qualified name of the .NET type that implements the DbProviderFactory interface. |
| The user-friendly label displayed in design-time UI components, such as the Data Source Wizard. |
The <CustomReportItems> section registers custom controls for use in reports.
In the Modern format, this registration is split into two distinct scopes. This separation ensures that runtime environments (such as web or cloud services) load only the rendering logic, while heavy UI and design-time assemblies are restricted to desktop environments.
<RuntimeComponents>: Located within the <ActiveReportsConfig> scope, this section registers the core implementation of the custom control used for processing and rendering the report.
<DesignComponents>: Located within the <ActiveReportsConfig.Desktop> scope, this section registers the metadata, designer behavior, and UI elements required by the Report Designer.
<Configuration>
<ActiveReportsConfig>
<CustomReportItems>
<RuntimeComponents>
<clear />
<add name="RadarChart" type="MESCIUS.ActiveReports.Samples.Radar.RadarChart, RadarChart" />
</RuntimeComponents>
</CustomReportItems>
</ActiveReportsConfig>
<ActiveReportsConfig.Desktop>
<CustomReportItems>
<DesignComponents>
<clear />
<add name="RadarChart"
type="MESCIUS.ActiveReports.Samples.Radar.RadarDesigner, RadarDesigner" toolboxIcon="MESCIUS.ActiveReports.Samples.Radar.RadarIcon.png" />
</DesignComponents>
</CustomReportItems>
</ActiveReportsConfig.Desktop>
</Configuration>Attribute | Scope | Description |
|---|---|---|
| Both | The unique identifier for the custom item. This name must match in both runtime and design-time sections to link the components correctly. |
| Both | The assembly-qualified name of the .NET type. • Runtime: The class implementing the control logic. • Design: The class implementing the designer metadata/behavior. |
| Design | (Optional) The resource path to the icon displayed in the Report Designer toolbox. |
For a complete implementation of a custom control, see the Custom Chart Sample.
The <FontSettings> section controls how the ActiveReports engine discovers and resolves fonts. This configuration is critical for ensuring WYSIWYG consistency across different platforms (e.g., Windows, Linux, Docker), especially when the hosting environment lacks the specific fonts used during design time.
<ActiveReportsConfig>
<FontSettings>
<FontFolders>
<add path="%WINDIR%/Fonts" recurse="true"/>
<add path="%USERPROFILE%/AppData/Local/Microsoft/Windows/Fonts" recurse="true"/>
</FontFolders>
<FontSubstitutions>
<add from="Arabic Transparent" to="Arial"/>
</FontSubstitutions>
<FallbackFonts>
<add font="Microsoft Sans Serif"/>
<add font="MS UI Gothic" />
<add font="Arial" />
</FallbackFonts>
<FontLinks>
<add font="Lucida Sans Unicode"
list="MS UI Gothic,PMingLiU,SimSun,Gulim,Yu Gothic UI,Microsoft JhengHei UI,Microsoft YaHei UI,Malgun Gothic" />
</FontLinks>
</FontSettings>
</ActiveReportsConfig>1. <FontFolders>
Registers custom directories where the engine should search for font files (.ttf, .otf, etc.). This is useful for containerized environments where fonts might reside in non-standard locations.
path: The file system path to the font directory. Supports environment variables (e.g., %WINDIR%).
recurse: (true/false) If set to true, the engine searches all subdirectories for font files.
2. <FontSubstitutions>
Maps a requested font to a replacement font. This is used when a specific font is requested by the report but is known to be unavailable in the target environment.
from: The name of the font requested in the report definition.
to: The name of the local font to use as a substitute at runtime.
3. <FallbackFonts>
Defines a global priority list of fonts to use when the primary font lacks a glyph for a specific character. This is essential for reports containing multi-language data (e.g., CJK characters) mixed with standard Latin text.
font: The name of the fallback font to attempt.
4. <FontLinks>
Defines a "linked" chain of fonts for a specific base font. This mimics the Windows Font Linking feature, allowing you to extend the character set of a specific font by borrowing glyphs from others.
font: The base font being extended.
list: A comma-separated list of fonts to check for missing glyphs when the base font is used.
The <MapTileProviders> section configures the external tile services used by the Map report item. This allows you to set up authentication for standard services (like Bing or Google Maps) or register completely custom tile providers.
Most commercial map services require a valid API key for production use. Common providers include:
Azure Maps: Azure Maps Product Page
Google Maps: Requires a Google Developer Account
MapQuest: Requires a MapQuest Developer Network Account
Each provider is registered using an <add> element, which may contain a nested <Settings> collection for provider-specific parameters.
Attribute | Description |
|---|---|
| The internal unique identifier for the provider. |
| The user-friendly name displayed in the Report Designer UI. |
| (Required for Custom Providers) The assembly-qualified name of the .NET class implementing the custom tile provider logic. If omitted, ActiveReports attempts to resolve the provider using built-in logic based on the |
<ActiveReportsConfig>
<MapTileProviders>
<add name="Google" displayName="Google Tiles">
<Settings>
<add key="ApiKey" value="<Here is your API key>" />
<add key="Timeout" value="5000" />
</Settings>
</add>
</MapTileProviders>
</ActiveReportsConfig>Each provider can accept a list of configuration keys within a <Settings> child element.
ApiKey: The access token or API key required by the external map service to authorize requests.
Timeout: The maximum time (in milliseconds) to wait for a tile to load before timing out (e.g., 5000).
To use a custom tile provider, you must implement the provider logic in code and register it here using the type attribute. This allows you to extend ActiveReports to support specialized or private map services.
For implementation details, refer to the Custom Tile Provider Sample.
The <Settings> section within <ActiveReportsConfig> controls the core runtime behavior and security policies of the reporting engine. It allows you to fine-tune execution policies, text rendering algorithms, and security constraints related to deserialization.
This section uses the standard key-value pair format.
<clear />: Removes any previously defined settings, ensuring that the current section is the definitive source for runtime options.
<add key="..." value="..." />: Defines an individual runtime setting.
Key | Values | Description |
|---|---|---|
|
| Controls the execution of custom code embedded in report definitions. • Enabled: Scripts are allowed to run. • Disabled: Scripts are blocked. Use this setting in high-security environments to prevent code injection risks. |
|
| Determines the logic used for wrapping text. • Unicode: Uses standard Unicode line-breaking rules (recommended for modern applications). • Legacy: Retains behavior from older ActiveReports versions to ensure pixel-perfect backward compatibility. |
|
| Toggles the validation checks performed before report execution. • false: (Recommended) The engine validates the report structure and expressions before running. • true: Bypasses validation. This may improve startup performance for trusted reports but can lead to obscure runtime errors if the report is invalid. |
|
| Controls backward compatibility for loading older report object models. • false: (Recommended) Disables legacy logic for improved security. • true: Enables support for deprecated serialization formats. Only enable this if you encounter specific issues loading very old report files. |
|
| Controls the use of the .NET • false: (Recommended) Disables binary formatting to mitigate known .NET security vulnerabilities. • true: Enables binary formatting. Warning: This should only be used if absolutely necessary and within a trusted environment. |
<ActiveReportsConfig>
<Settings>
<clear />
<add key="ScriptExecutionPolicy" value="Enabled" /> <!-- Enabled or Disabled -->
<add key="LineBreakingAlgorithm" value="Unicode" /> <!-- Unicode or Legacy -->
<add key="SkipReportValidation" value="false" />
<add key="EnableLegacyDeserialization" value="false" />
<add key="EnableBinaryFormatterDeserialization" value="false" />
</Settings>
</ActiveReportsConfig>These settings allow you to customize Report Wizard UI by enabling and disabling its elements.
<ReportWizardReportTypes>)This collection defines the list of report types available in the "New Report" wizard and determines which one is pre-selected.
Attributes
Attribute | Description |
|---|---|
| The internal identifier of the report type (see values below). |
| ( |
Available Values
RdlMultiSection: RDL Multi-Section reports (modern, responsive layout).
Section: Traditional Section reports (banded layout).
Page: Page reports (fixed-page layout).
RdlDashboard: Dashboard-style RDL reports.
SampleReports: Enables the "Samples" tab in the wizard, allowing users to select from pre-built templates.
<ReportWizardDataSourceTypes>)This collection filters the categories of data connectors displayed in the Data Source Wizard.
Available Values
File: File-based sources (CSV, JSON, XML, Excel).
DataBase: Relational databases (SQL Server, SQLite, etc.) via ADO.NET providers.
WebAPI: HTTP-based data sources (REST, OData).
Programmatic: Data supplied dynamically by custom code (Object providers).
Both collections use standard configuration logic:
<clear />: Removes all default options. Use this first if you want to define a strictly limited list of available types.
<add name="..." />: Adds a specific type to the allowed list. Only the types explicitly added here will appear in the UI.
<ActiveReportsConfig.Desktop>
<ReportWizardReportTypes>
<clear />
<add name="RdlMultiSection" default="true" />
<add name="Section" />
<add name="Page" />
<add name="RdlDashboard" />
<add name="SampleReports" />
</ReportWizardReportTypes>
<ReportWizardDataSourceTypes>
<clear />
<add name="File" />
<add name="DataBase" />
<add name="WebAPI" />
<add name="Programmatic" />
</ReportWizardDataSourceTypes>
</ActiveReportsConfig.Desktop>The <ReportDesignerAiProviders> section configures the external AI services used by the Report Designer and Report Wizard. These integrations enable advanced features such as generating report layouts from images (OCR) and using Generative AI to automatically build data regions (tables, charts, etc.) based on your dataset structure.
Each provider is registered using an <add> element, which points to a specific factory type that handles the communication with the external service.
Attributes
Attribute | Description |
|---|---|
| The logical identifier of the AI provider. This is used internally to bind specific wizard steps (like "Report from Image") to the correct service. |
| The assembly-qualified name of the factory class that implements the provider logic. |
Each provider defines its own configuration via the <Settings> collection. Common keys include:
ApiKey: The authentication key required to access the external AI service.
Endpoint: The service URL (specifically required for Azure AI Document Intelligence).
Model: The specific model identifier or deployment name (required for OpenAI or Azure OpenAI).
Timeout: The maximum request duration in milliseconds (e.g., 90000) before the operation is cancelled.
Azure AI Document Intelligence: Used for OCR-based layout generation (converting an image into a report layout).
OpenAI / Azure OpenAI: Used for analyzing data structures and generating report data regions automatically.
<ReportDesignerAiProviders>
<clear />
<add name="ReportWizard.OCR.AzureAiDocumentIntelligence" type="GrapeCity.ActiveReports.Design.AI.AzureAI.DocumentIntelligence.ReportFromImage.ReportImageAnalyzerFactory, MESCIUS.ActiveReports.Design.AI.AzureAI.DocumentIntelligence">
<Settings>
<add key="ApiKey" value="<Azure AI API key here>" />
<add key="Endpoint" value="<service URL here>" />
<add key="Timeout" value="90000" />
</Settings>
</add>
<add name="ReportWizard.DataRegionsBuilder.OpenAI" type="GrapeCity.ActiveReports.Design.AI.OpenAI.OpenAIDataRegionsBuilderFactory, MESCIUS.ActiveReports.Design.AI.OpenAI">
<Settings>
<add key="ApiKey" value="<OpenAI API Key here>" />
<add key="Model" value="gpt-4o" />
<add key="Timeout" value="90000" />
</Settings>
</add>
</ReportDesignerAiProviders>The <Settings> section within <ActiveReportsConfig.Desktop> allows you to customize the behavior of the Report Designer and Report Viewer controls. This includes configuring print dialogs, rendering engines, and controlling the visibility of specific toolbox items.
These keys control the rendering and printing behavior of the Report Viewer.
Key | Values | Description |
|---|---|---|
|
| Toggles font aliasing/smoothing within the viewer control. |
|
| Selects the style of the print dialog. • Advanced: Uses the custom ActiveReports print dialog with enhanced options. • Standard: Uses the native OS print dialog. • XpStyle: Uses the legacy Windows XP-style dialog. |
|
| Selects the underlying printing engine. • Auto: Let ActiveReports choose the most suitable engine. • GDI: Forces GDI-based printing. • Direct2D: Uses Direct2D hardware acceleration where available. |
These keys control the general workflow of the Report Designer.
Key | Values | Description |
|---|---|---|
|
| Controls wizard behavior when adding complex controls. • true: Automatically launches the Data Region Wizard when a control (like a Table or Chart) is dropped onto the design surface. • false: Adds the control immediately without launching the wizard. |
These keys allow you to show or hide specific controls in the Designer Toolbox. This is useful for deprecating legacy controls or simplifying the UI for end-users.
Key | Values | Description |
|---|---|---|
|
| Controls visibility of the OLE Object control. |
|
| Controls visibility of the Matrix data region. |
|
| Controls visibility of the legacy Chart control. |
|
| Controls visibility of the modern Chart control. |
These keys configure the Report Library, which allows users to drag and drop re-usable report parts (like headers, logos, or charts) into their designs.
Key | Values | Description |
|---|---|---|
|
| Toggles the visibility of the Report Library panel in the designer. |
| String Path | The file system path where report parts are stored. Supports environment variables (e.g., |
<ActiveReportsConfig.Desktop>
<Settings>
<add key="Viewer.EnableFontSmoothing" value="false" />
<add key="Viewer.PrintDialogStyle" value="Advanced" />
<add key="Viewer.PrintingSystem" value="Auto" />
<add key="Designer.AutoInvokeDataRegionWizard" value="true" />
<add key="Designer.Toolbox.EnableOleObject" value="false" />
<add key="Designer.Toolbox.EnableMatrix" value="false" />
<add key="Designer.Toolbox.EnableChartClassic" value="false" />
<add key="Designer.Toolbox.EnableChart" value="true" />
<add key="Designer.Controls.ShowReportsLibrary" value="false" />
<add key="Designer.Controls.ReportPartsDirectory" value="%MyDocuments%/ReportsLibrary" />
</Settings>
</ActiveReportsConfig.Desktop>