es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¡Mi aplicación System.CommandLine no se compila! No puede encontrar un CommandHandler. ¿Necesito escribirlo?

Estoy utilizando VS 2022, .Net 6.0, y tratando de construir mi primera aplicación usando System.CommandLine.

Problema: cuando lo construyo, obtengo un error

El nombre ‘CommandHandler’ no existe en el contexto actual

El código que estoy tratando de construir es la aplicación de ejemplo del sitio GitHub: https://github.com/dotnet/command-line-api/blob/main/docs/Your-first-app-with-System-CommandLine.md , sin alteraciones (creo).

Se ve así:

using System;
using System.CommandLine;
using System.IO;

static int Main(string[] args)
{
    // Crear un comando raíz con algunas opciones
    var rootCommand = new RootCommand
        {
        new Option<int>(
            "--int-option",
            getDefaultValue: () => 42,
            description: "Una opción cuyo argumento se analiza como un int"),
        new Option<bool>(
            "--bool-option",
            "Una opción cuyo argumento se analiza como un bool"),
        new Option<fileinfo>(
            "--file-option",
            "Una opción cuyo argumento se analiza como un FileInfo")
    };

    rootCommand.Description = "Mi aplicación de ejemplo";

    // Tenga en cuenta que los parámetros del método de controlador se combinan según los nombres de las opciones
    rootCommand.Handler = CommandHandler.Create<int, bool,="" fileinfo="">((intOption, boolOption, fileOption) =>
    {
        Console.WriteLine($"El valor de --int-option es: {intOption}");
        Console.WriteLine($"El valor de --bool-option es: {boolOption}");
        Console.WriteLine($"El valor de --file-option es: {fileOption?.FullName ?? "nulo"}");
    });

    // Analizar los argumentos entrantes e invocar el controlador
    return rootCommand.InvokeAsync(args).Result;

}

He instalado la última versión de System.Commandline: 2.0.0-beta2.21617.1

SEGURAMENTE solo estoy siendo un gran tonto en algún aspecto. Pero no lo veo.

Cualquier idea sería bienvenida.</int,>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el espacio de nombres. Como la clase CommandHandler está definida en el espacio de nombres System.CommandLine.Invocation, necesitas agregarlo como una directiva de uso en tu código.

    Agrega lo siguiente al inicio de tu archivo:

    using System.CommandLine.Invocation;
    

    Esto debería resolver el error que estás viendo.

Comments are closed.