【问题标题】:Pass args to Main(string[] args)将 args 传递给 Main(string[] args)
【发布时间】:2019-01-22 01:50:19
【问题描述】:

我正在尝试构建一个控制台应用程序来启动我构建为 .dll 的 .NetCore Web 应用程序

不幸的是,我的应用程序没有收到在 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 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(); 来启动 Process。

如前所述,我确实得到了输出但没有 Args... 那么为什么我看到“已收到:”但最后什么也没有?

在将 SocketAPI 作为进程启动时,我是否必须启用 SocketAPI 才能接收 args?我从 2 天以来一直在努力解决这个问题,但我完全一无所知......

亲切的问候

【问题讨论】:

  • "Received : " -> "Rece{0}ived : "
  • @PetSerAl 什么?
  • @PetSerAl 再次查看后,我意识到你想告诉我什么! OC你的回答也是对的!谢谢你的建议! :)

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


【解决方案1】:

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

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

【讨论】:

  • 我试过你的例子......我添加了 GetFullPath 但那不起作用。参数仍未通过:(
  • “someproject.dll”是什么样的项目?
  • 一个控制台应用程序。
  • 我觉得很无聊,你是对的:在你的代码中你没有为参数长度添加一个占位符!哇哦:D
  • 伙计,我想给你买杯咖啡:)
【解决方案2】:

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

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

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

打扰了!

【讨论】:

  • 我们都去过那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2011-08-25
  • 2017-02-04
  • 2014-02-22
  • 2012-11-18
  • 1970-01-01
相关资源
最近更新 更多