abpframework/abp · error · UserFriendlyException
Can not set {companyName} if {companyNamePlaceHolder} is nul
Error message
Can not set {companyName} if {companyNamePlaceHolder} is null. What it means
Thrown by the `SolutionRenamer` constructor when a `companyName` is supplied but `companyNamePlaceHolder` is null. It is a `UserFriendlyException` enforcing the invariant that you can only rename the company if a placeholder for it exists in the template.
Source
Thrown at framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenamer.cs:26
public class SolutionRenamer
{
private readonly List<FileEntry> _entries;
private readonly string _companyNamePlaceHolder;
private readonly string _projectNamePlaceHolder;
private readonly string _companyName;
private readonly string _projectName;
public SolutionRenamer(List<FileEntry> entries, string companyNamePlaceHolder, string projectNamePlaceHolder, string companyName, string projectName)
{
if (string.IsNullOrWhiteSpace(companyName))
{
companyName = null;
}
if (companyNamePlaceHolder == null && companyName != null)
{
throw new UserFriendlyException($"Can not set {nameof(companyName)} if {nameof(companyNamePlaceHolder)} is null.");
}
_entries = entries;
_companyNamePlaceHolder = companyNamePlaceHolder;
_projectNamePlaceHolder = projectNamePlaceHolder ?? throw new ArgumentNullException(nameof(projectNamePlaceHolder));
_companyName = companyName;
_projectName = projectName ?? throw new ArgumentNullException(nameof(projectName));
}
public void Run()
{
if (_companyNamePlaceHolder != null)
{
if (_companyName != null)
{
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder, _companyName);View on GitHub (pinned to 7ed43b1931)
Solutions
- Omit `companyName` (pass null) when the template has no company placeholder.
- If you do need a company name, use a template that defines a company placeholder and pass the matching `companyNamePlaceHolder`.
Example fix
// before new SolutionRenamer(entries, companyNamePlaceHolder: null, projectNamePlaceHolder: "MyProj", companyName: "Acme", projectName: "BookStore"); // after (no company placeholder => no company name) new SolutionRenamer(entries, null, "MyProj", companyName: null, projectName: "BookStore");
Defensive patterns
Strategy: validation
Validate before calling
if (!string.IsNullOrWhiteSpace(companyName) && string.IsNullOrWhiteSpace(companyNamePlaceHolder))
throw new ArgumentException("companyName requires a non-null companyNamePlaceHolder.");
var renamer = new SolutionRenamer(entries, companyNamePlaceHolder, projectNamePlaceHolder, companyName, projectName); Type guard
static bool CanSetCompany(string placeHolder, string company) =>
string.IsNullOrWhiteSpace(company) || !string.IsNullOrWhiteSpace(placeHolder); Try / catch
try { new SolutionRenamer(entries, companyPH, projectPH, company, project); }
catch (UserFriendlyException ex) when (ex.Message.Contains("companyNamePlaceHolder"))
{
// drop the company name and retry, or choose a template with a company placeholder
} Prevention
- Only pass a company name when the template defines a company placeholder.
- Document which templates support company placeholders.
- Centralize renamer construction behind a helper that enforces this invariant.
When it happens
Trigger: Calling the renamer with `companyName` set while `companyNamePlaceHolder` is null, i.e. asking to replace a company name when the template does not define a company placeholder.
Common situations: A template/module that has no company segment (single-name solution) but the user passes `--company-name`; misordered arguments when constructing `SolutionRenamer` programmatically.
Related errors
- repositoryNameWithOrganization '{repositoryNameWithOrganizat
- Solution name is not valid. It should be 1 character length
- Solution name is not valid. Company name should be 1 charact
- Solution name is not valid. Project name should be 1 charact
- DbMigrations folder path is missing!
AI-assisted analysis of abpframework/abp@7ed43b1931 (2026-08-13).
Data as JSON: /api/errors/36210912b2367125.
Report an issue: GitHub.