dotnet/runtime · error

Option : ' ' missing property value

Error message

Option %s: '%s' missing property value

What it means

Printed at src/coreclr/hosts/corerun/corerun.cpp:804 when a -p/--property argument is present but does not contain an '=' delimiter, so no value can be split from the key. corerun requires the `<key>=<value>` form.

Solutions

  1. Write the property as KEY=VALUE with no spaces around '='.
  2. Quote the whole token if the value contains spaces: `-p "FancyProp=/usr/first last/root"`.
  3. Double-check shell quoting/escaping that might split the token.

Example fix

// before
corerun -p System.GC.Server true MyApp.dll
// after
corerun -p System.GC.Server=true MyApp.dll
Defensive patterns

Strategy: validation

Validate before calling

// Verify each property token contains '='
bool property_form_ok(int argc, char** argv) {
    for (int i=1;i<argc;i++) {
        if (!strcmp(argv[i],"-p") || !strcmp(argv[i],"--property")) {
            if (i+1>=argc) return false;
            if (!strchr(argv[i+1],'=')) return false;
        }
    }
    return true;
}

Prevention

When it happens

Trigger: Triggered when the token after -p has no '=' (prop.find('=') returns npos). E.g. `corerun -p System.GC.Server true MyApp.dll`.

Common situations: Using a space instead of '=', forgetting the equals sign, or shell-quoting that strips the '='.

Related errors


AI-assisted analysis of dotnet/runtime@60108ba66e (2026-08-10). Data as JSON: /api/errors/a3fbecbd62683355. Report an issue: GitHub.

Appendix: source

Thrown at src/coreclr/hosts/corerun/corerun.cpp:804

            {
                pal::fprintf(stderr, W("Option %s: missing path\n"), arg);
                break;
            }
        }
        else if (pal::strcmp(option, W("p")) == 0 || (pal::strcmp(option, W("property")) == 0))
        {
            i++;
            if (i >= argc)
            {
                pal::fprintf(stderr, W("Option %s: missing property\n"), arg);
                break;
            }

            string_t prop = argv[i];
            size_t delim_maybe = prop.find(W('='));
            if (delim_maybe == string_t::npos)
            {
                pal::fprintf(stderr, W("Option %s: '%s' missing property value\n"), arg, prop.c_str());
                break;
            }

            string_t key = prop.substr(0, delim_maybe);
            string_t value = prop.substr(delim_maybe + 1);
            config.user_defined_keys.push_back(std::move(key));
            config.user_defined_values.push_back(std::move(value));
        }
        else if (pal::strcmp(option, W("l")) == 0 || (pal::strcmp(option, W("preload")) == 0))
        {
            i++;
            if (i >= argc)
            {
                pal::fprintf(stderr, W("Option %s: missing shared library path\n"), arg);
                break;
            }

            string_t library = argv[i];

View on GitHub (pinned to 60108ba66e)