将args传递给Main(string [] args)

时间:2019-01-22 01:50:20

标签: c# .net process .net-core args

我试图构建一个控制台应用程序来启动以.dll构建的.NetCore Web应用程序

不幸的是,我的应用程序未收到在ProcessStartInfo中输入的Arg,但是我的应用程序确实启动了,并且在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声明和调用,它是一个保存当前Process的类:

我也参考此文档: dotnet command documentation on 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,
};

稍后,我在ProcessRunner中调用Process.Start();以启动流程。

正如我所说的,我得到了Output,但是没有Args。。。

在将它们作为进程启动时,是否必须使我的SocketAPI能够接收args?从两天以来,我一直在尝试解决该问题,但我一无所知...

亲切问候

2 个答案:

答案 0 :(得分:0)

在您的代码中,您没有为参数长度添加占位符。

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();解析您的工作目录。

答案 1 :(得分:0)

非常感谢@AlexanderHiggins向我展示了我现在应该有多沉闷!

  

在您的代码中,您没有为参数长度添加占位符。

     

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

抱歉打扰!