abpframework/abp · error · UserFriendlyException

The React UI is generated by ABP Studio's modern solution te

Error message

The React UI is generated by ABP Studio's modern solution templates and is not supported by the classic template builder.

What it means

A UserFriendlyException raised in TemplateProjectBuilder.BuildAsync after NormalizeArgs, when args.UiFramework equals UiFramework.React. The classic template builder has no React pipeline; React solutions are produced only by ABP Studio's modern templates, so the CLI fails fast instead of emitting a solution with an unconfigured UI. This also catches the case where UiFramework.NotSpecified is normalized to React.

Source

Thrown at framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/TemplateProjectBuilder.cs:67

        ApiKeyService = apiKeyService;
        EventBus = eventBus;
        _configuration = configuration;

        Logger = NullLogger<TemplateProjectBuilder>.Instance;
    }

    public async Task<ProjectBuildResult> BuildAsync(ProjectBuildArgs args)
    {
        var templateInfo = await GetTemplateInfoAsync(args);

        NormalizeArgs(args, templateInfo);

        // Checked after NormalizeArgs so a NotSpecified UI resolved to React is caught too. React is only
        // produced by ABP Studio's modern solution templates; the classic builders below have no React
        // handling, so fail fast instead of emitting a solution with an unconfigured UI.
        if (args.UiFramework == UiFramework.React)
        {
            throw new UserFriendlyException(
                "The React UI is generated by ABP Studio's modern solution templates and is not supported by the classic template builder.");
        }

        await EventBus.PublishAsync(new ProjectCreationProgressEvent {
            Message = "Downloading the solution template"
        }, false);
        
        var templateFile = await SourceCodeStore.GetAsync(
            args.TemplateName,
            SourceCodeTypes.Template,
            args.Version,
            args.TemplateSource,
            args.ExtraProperties.ContainsKey(NewCommand.Options.Preview.Long),
            skipCache: args.SkipCache,
            trustUserVersion: args.TrustUserVersion
        );

        ConfigureThemeOptions(args, templateFile.Version);

View on GitHub (pinned to 7ed43b1931)

Solutions

  1. Generate the React solution with ABP Studio instead of the classic 'abp new' command.
  2. Pick a UI framework supported by the classic builder: mvc, angular, blazor, blazor-server, blazor-wasm, or none.
  3. If you must script creation, invoke the Studio CLI / modern template pipeline rather than ProjectProjectBuilder.

Example fix

// before
abp new Acme.App -t app -u react
// after (classic CLI)
abp new Acme.App -t app -u angular
// after (React desired)
// Use ABP Studio's modern solution templates
Defensive patterns

Strategy: validation

Validate before calling

if (args.UiFramework == UiFramework.React)
{
    Console.Error.WriteLine("React UI requires ABP Studio. Use a classic UI or switch to Studio.");
    return;
}

Type guard

static bool IsClassicSupportedUi(UiFramework ui) =>
    ui == UiFramework.Mvc || ui == UiFramework.Angular ||
    ui == UiFramework.Blazor || ui == UiFramework.BlazorServer ||
    ui == UiFramework.BlazorWebAssembly || ui == UiFramework.NotSpecified;

Prevention

When it happens

Trigger: Running 'abp new MyProj -u react' (or passing UiFramework.React via ProjectBuildArgs) through the classic ProjectProjectBuilder. Also triggered indirectly when a NotSpecified UI resolves to React during normalization.

Common situations: Following a tutorial that uses --ui react without noting it requires ABP Studio; migrating a Studio-generated project back to the classic CLI; automation that always passes a UI flag.

Related errors


AI-assisted analysis of abpframework/abp@7ed43b1931 (2026-08-13). Data as JSON: /api/errors/4153a4ed536704fc. Report an issue: GitHub.