将参数传递给 Main(string[] args)
Pass args to Main(string[] args)
我正在尝试构建一个控制台应用程序来启动我构建为 .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 声明和调用,它是一个 Class 保存当前进程:
我也指的是这个文档:
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();
以启动进程。
如前所述,我确实得到了输出但没有 Args...那么为什么我看到 "Received :" 但最后什么也没有?
我是否必须启用我的 SocketAPI 在将它们作为进程启动时接收参数?从 2 天以来,我一直在尝试处理这个问题,但我完全无能为力...
亲切的问候
在您的代码中,您没有为参数长度添加占位符。
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();
解析您的工作目录
非常感谢@AlexanderHiggins 向我展示了我现在应该感到多么乏味!
In your code you are not adding a placeholder for the argument length.
Console.WriteLine(string.Format("Received: {0} ",args.Length));
抱歉打扰了!
我正在尝试构建一个控制台应用程序来启动我构建为 .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 声明和调用,它是一个 Class 保存当前进程:
我也指的是这个文档: 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();
以启动进程。
如前所述,我确实得到了输出但没有 Args...那么为什么我看到 "Received :" 但最后什么也没有?
我是否必须启用我的 SocketAPI 在将它们作为进程启动时接收参数?从 2 天以来,我一直在尝试处理这个问题,但我完全无能为力...
亲切的问候
在您的代码中,您没有为参数长度添加占位符。
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();
解析您的工作目录非常感谢@AlexanderHiggins 向我展示了我现在应该感到多么乏味!
In your code you are not adding a placeholder for the argument length.
Console.WriteLine(string.Format("Received: {0} ",args.Length));
抱歉打扰了!