A launchSettings.json is not configuration, and it is committed

The file sits next to appsettings.json, contains environment variables and URLs, and is read only by the tooling — never by a published application.

// Properties/launchSettings.json — development tooling only
{
  "profiles": {
    "Orders": {
      "commandName": "Project",
      "applicationUrl": "https://localhost:5001",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

Putting a real connection string in it is the mistake, because it is committed by default and the file looks exactly like configuration. The layering that does apply in production is appsettings.json, then appsettings.{Environment}.json, then environment variables, then command-line arguments — each overriding the last, which is the same idea as a .env hierarchy with the precedence written down. Knowing the file is inert outside dotnet run saves an afternoon of wondering why a setting has no effect.