Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Usage of dotnet tools on assemblies with CommandLineParser results in unexpected output #931

Open
programm-ingovals opened this issue Jul 9, 2024 · 1 comment

Comments

@programm-ingovals
Copy link

I was trying to add CommandLineParser to a asp.net core project of mine to conditionally apply seed and test data on runs.

If I run any sort of tool on the assembly I get output from the Parser.

F.e. dotnet ef migrations list

ERROR(S):
  Option 'applicationName' is unknown.

  -s, --seed    Seed required data.

  -t, --test    Seed  data for dev and testing purposes.

  -a, --auth    Seed auth data.

  --help        Display this help screen.

  --version     Display version information.

I'm assuming that the tools themselves are passing these options or something along the line. Everything seems to work properly, but is this something other people have dealt with in some way?

@cedarbaum
Copy link

cedarbaum commented Aug 20, 2024

I ran into this as well - a couple potential solutions:

  1. Don't parse CLI flags when EF.IsDsignTime is true. This only works if you don't need the CLI flags to properly build the IHost object or don't need the IHost object for configuring the DbContext (e.g., in a case where DbContext configures itself independently of ASP.NET server build).
using Microsoft.EntityFrameworkCore;

static void Main(string[] args)
{
     if (EF.IsDesignTime)
    {
        Log.Logger.Here().Information("Design-time detected. Skipping server startup.");
        return;
    }

   // Parse flags as normal, build ASP.NET application
}
  1. Add the applicationName flag to CommandLineParser to avoid the error and build the web app as normal.
internal class Flags
{
    #region ASP.NET Core Flags
    [Option("applicationName", Default = "MyApp", HelpText = "The name of the application.")]
    public string ApplicationName { get; set; }
    
    // Other ASP.NET flags as-needed, e.g.:
    [Option("environment", Default = "Production", HelpText = "The environment the application is running in.")]
    public string Environment { get; set; }
    #endregion

   // Rest of flags...
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants