Исключение верхней полки - PullRequest
3 голосов
/ 20 июля 2010

Я использую topshelf и получаю это исключение, когда пытаюсь использовать опцию "-i" для установки в качестве службы.

Невозможно выполнить приведениеобъект типа 'Magnum.CommandLineParser.SwitchElement' для типа 'Magnum.CommandLineParser.IArgumentElement'.

Исключение происходит в этой функции

static void Set(TopshelfArguments args, 
                IEnumerable<ICommandLineElement> commandLineElements)
{
    var command = commandLineElements
        .Take(1)
        .Select(x => (IArgumentElement) x) //EXCEPTION BREAKS ON THIS LINE
        .Select(x => x.Id)
        .DefaultIfEmpty("commandline")
        .SingleOrDefault();

    args.Command = command;
    //leftovers
    args.CommandArgs = commandLineElements.Skip(1).ToList();
}

Ответы [ 2 ]

3 голосов
/ 20 июля 2010

Для установки в качестве службы мы используем TopShelf

program.exe service install

Я считаю, что это единственный способ, который поддерживается в коде RC. Вы можете удалить через

program.exe service uninstall
1 голос
/ 20 июля 2010

Похоже, при передаче в -i, что анализатор преобразует его в тип SwitchElement. Попробуйте, чтобы увидеть, работает ли он.

static void Set(TopshelfArguments args, IEnumerable<ICommandLineElement> commandLineElements)
    {
        var command = commandLineElements
            .Take(1)
            .Select(x => (ISwitchElement) x) 
            .Select(x => x.Key)
            .DefaultIfEmpty("commandline")
            .SingleOrDefault();


        args.Command = command;
        //leftovers
        args.CommandArgs = commandLineElements.Skip(1).ToList();
    }
...