我需要向我的concole应用程序传递几个参数:
1项目名称
2版本名称
3部署环境名称
4一些布尔
5整数数组
据我所知,我需要运行以下代码:
string myParams = "Test proj name " + "3.22.652.965863 " + "QA " + "true " + "463841";
//string cParams = "true ";
var proc = System.Diagnostics.Process.Start(@"c:\\ MyFolder\bin\Debug\MyApp.exe", myParams);
MyExe.exe
入口点有此代码:
static void Main(string[] args)
{
//Console.WriteLine(Convert.ToBoolean(args[0]));
string projectName = null;
string buildNumber = null;
string deploymentEnvironmentName = null;
bool shouldResolve = false;
List<int> ids = new List<int>();
if (args.Length >= 5)
{
for (int i = 0; i < args.Length; i++)
{
if (i == 0)
{
Console.WriteLine($"Arg: {i} is {args[i]}");
projectName = args[i];
}
if (i == 1)
{
Console.WriteLine($"Arg: {i} is {args[i]}");
buildNumber = args[i];
}
if (i == 2)
{
Console.WriteLine($"Arg: {i} is {args[i]}");
deploymentEnvironmentName = args[i];
}
if (i == 3)
{
Console.WriteLine($"Arg: {i} is {args[i]}");
Console.WriteLine($"Boolean convertion: {args[i]}");
shouldResolve = Convert.ToBoolean(args[i]);
}
if (i > 3)
{
ids.Add(Convert.ToInt32(args[i]));
}
}
MyService.MyMethod(ids, projectName, buildNumber, deploymentEnvironmentName, shouldResolve);
}
else
{
throw new Exception("You should define arguments only in following order: Project Name, Build Number, Deployment Environment Name and Array of your Change Sets");
}
Console.ReadLine();
}
我事先并不知道我将拥有多少个整数,但我需要事先了解其他参数的顺序。
但是我的问题System.Diagnostics.Process.Start
方法通过空格分隔参数。这意味着我的第一个参数“Test proj name”不会转换为一个参数,但它将被解析为“Test”,“proj”和“name”。它使我的代码混乱,我不能提前指望参数的顺序。
我该如何解决?
也许我可以定义自己的分隔符并忽略空格作为分隔符?
我将不胜感激任何帮助或建议。
答案 0 :(得分:3)
您应该能够通过将参数括在双引号中来解决此问题:
string myParams = "\"Test proj name\" " + "3.22.652.965863 " + "QA " + "true " + "463841";
包含空格的单个参数必须用引号括起来,但这些引号不会传递给目标应用程序。
即。您的应用程序将收到Test proj name
字符串,周围没有引号。