Передать аргументы в Main (строка [] args) - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь создать консольное приложение для запуска моих веб-приложений .NetCore, которые я создал как .dll

К сожалению, аргументы, введенные в ProcessStartInfo, не принимаются моим приложением, однакомое приложение запускается, и я получаю неожиданное поведение в методе Console.WriteLine.

Этот код находится в моем проекте SocketAPI, который является .NetCore 2.2 WebApplication |Проект API:

public static void Main(string[] args)
{
    // Outputs -> Received :
    // ?? Why is args.Length empty? Not even 0 or null??
    Console.WriteLine(string.Format("Received : ",args.Length));

    CreateWebHostBuilder(args).Build().Run();
}

Он объявляется и вызывается моим ProcessRunner, который является классом, который содержит текущий процесс:

Я также ссылаюсь на эту документацию: документация команды dotnetна microsoft.com

Который описывает: dotnet [command] [arguments]

Этот код находится внутри Конструктора ProcessRunner

ProcessStartInfo = new ProcessStartInfo
{
    FileName = "dotnet",
    Arguments = string.Format("BHR.{0}.dll {1}", Name, args),
    WorkingDirectory = ".\\",
    UseShellExecute = false,
    RedirectStandardInput = true,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    CreateNoWindow = true,
};

Позже я звоню Process.Start();внутри ProcessRunner для запуска процесса.

Как я уже сказал, я получаю вывод, но без аргументов ... Так почему я вижу "Received:", но ничего в конце?

Нужно ли разрешать моему SocketAPI получать аргументы при запуске их как процесса?Я пытаюсь разобраться с этой проблемой уже 2 дня, и я совершенно не в курсе ...

С уважением

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Большое спасибо @AlexanderHiggins за то, что показали мне, как скучно я себя сейчас чувствую!

В вашем коде вы не добавляете заполнитель для длины аргумента.

Консоль.WriteLine (string.Format ("Received: {0}", args.Length));

Извините за беспокойство!

0 голосов
/ 22 января 2019

В вашем коде вы не добавляете заполнитель для длины аргумента.

Console.WriteLine(string.Format("Received: {0} ",args.Length));

К вашему сведению, это работает для меня:

var arguments = "myarg1 myarg2";
var dir = @"C:\somedir\somechilddir";

var info = new System.Diagnostics.ProcessStartInfo("dotnet", $"someproject.dll {arguments}");

info.UseShellExecute = false;
info.CreateNoWindow = true;
info.WorkingDirectory = dir;

var process = new System.Diagnostics.Process();
process.StartInfo = info;
process.Start();
process.WaitForExit();

Возможно, попробуйте разрешить ваш рабочий каталог, используяPath.GetFullPath ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...