Запуск .Net Core Application из пакетного скрипта и перенаправление исключения - PullRequest
0 голосов
/ 27 августа 2018

NET Core Console App` из пакетного скрипта и перенаправьте исключения в файл. Я также предоставляю аргументы для этого скрипта:

Мой сценарий до сих пор:

rem **calling C# solution from batch*******
@echo received from python param1:%1 , param2:%2 ,param3:%3
start "Dotnet Test" D:\adi\NET\Bench\Bench\bin\Debug\netcoreapp2.1\Bench.dll  dotnet %1 %2 %3 2>output.txt
pause

.NET Core Console App

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(args[0]);
            if (!File.Exists(args[0])) {
                File.Create(args[0]);
            }


            if(double.TryParse(args[1],out double dbl)) {
                Console.WriteLine($"arg[1]={dbl.ToString()}");
            }
            if (int.TryParse(args[2], out int inte)) {
                Console.WriteLine($"arg[2]={inte.ToString()}");
            }

            Console.ReadLine();
            Console.WriteLine("Hello World!");
        }
    }

До сих пор я пытался с 2> для перенаправления исключения, но он создает файл 0kb.

P.S Также я не уверен, правильно ли я запускаю .Net Core Application. Я использовал:
Источник: https://ss64.com/nt/start.html
START "title" [/D path] [options] "command" [parameters],
В нашем случае, куда входит команда dotnet? Обычно вы начинаете с терминала с
dotnet [appname].dll, но здесь вы помещаете его после пути и dll имени?

1 Ответ

0 голосов
/ 27 августа 2018

В нашем случае, куда входит команда dotnet? Вы обычно начинаете с терминала с dotnet [appname] .dll а вот вы поместите его после пути и имени dll?

Помимо других проблем,

start "Dotnet Test" D:\adi\NET\Bench\Bench\bin\Debug\netcoreapp2.1\Bench.dll dotnet %1 %2 %3 2>output.txt

должно быть

start "Dotnet Test" dotnet D:\adi\NET\Bench\Bench\bin\Debug\netcoreapp2.1\Bench.dll %1 %2 %3 2>output.txt

Вы не можете запустить DLL, вы хотите запустить dotnet для выполнения кода, содержащегося в DLL.

Также я не уверен, правильно ли я запускаю .Net Core Application.

Я подозреваю, что вы пытаетесь использовать start из-за недопонимания, описанного выше. Чтобы запустить ваше приложение в скрипте, все что вам нужно это:

dotnet D:\adi\NET\Bench\Bench\bin\Debug\netcoreapp2.1\Bench.dll %1 %2 %3 2>output.txt

start требуется только в том случае, если вы хотите запустить приложение .NET Core в отдельном окне, параллельно с остальной частью сценария. Это то, что команда

start "Dotnet Test" dotnet D:\adi\NET\Bench\Bench\bin\Debug\netcoreapp2.1\Bench.dll %1 %2 %3 2^>output.txt

должен сделать. Я пишу должно , потому что должно работать в соответствии с этим обсуждением , но на самом деле это не так.

Я мог бы заставить его работать, только используя обходной путь. Я создал отдельный пакетный скрипт runapp.cmd со следующим содержимым:

dotnet [appname].dll %1 %2 %3 2>error.txt & exit

И должен был начать вызвать этот скрипт:

start "Dotnet Test" runapp.cmd %1 %2 %3

...