我正在编写一个控制台应用程序,我们必须更新已安装应用程序上的多个连接字符串。我使用了“ CommandLineParser ”库以及“动词”功能。我的要求是使用单个命令行来传递不同的连接字符串值。
Example:
Installer.exe conn1 -sservername -uusername -ppassword conn2 -sservername -uusername -ppassword
而在“CommandLineParser”中却无法完成?还有其他我可以使用的图书馆吗?
我尝试了以下软件包,
答案 0 :(得分:1)
您可以使用NDesk.Options
进行模拟,但您必须自己编写一些验证码。
在NDesk.Options
中,您可以为默认选项注册处理程序("<>")。
该处理程序将针对您示例中的每个连接运行。每次遇到默认选项的值时,都可以创建连接设置对象,并在提供常规选项时填写最新的对象。
public class ConnectionListParser : OptionSet
{
public class ConnectionSettings
{
public string Name { get; set; }
public string Servername { get; set; }
public string Username { get; set; }
public string Password { get; set; }
}
public List<ConnectionSettings> Connections {get;} = new List<ConnectionSettings>();
public ConnectionListParser() {
Add("<>", x => {
Connections.Add(new ConnectionSettings() {
Name = x
});
});
Add("s:", x => Connections.Last().Servername = x);
Add("u:", x => Connections.Last().Username = x);
Add("p:", x => Connections.Last().Password = x);
}
}
用法:
var opts = new ConnectionListParser();
var remain = opts.Parse("conn1 -sservername1 -uusername1 -ppassword1 conn2 -sservername2 -uusername2 -ppassword2".Split(' '));
// or opts.Parse(args) when you have actual command line arguments to parse
foreach(var c in opts.Connections) {
Console.WriteLine($"Connection '{c.Name}': Username={c.Username};Password={c.Password};Servername={c.Servername}");
}
答案 1 :(得分:1)
您是否可以使用简单的算法解析命令行参数,如下所示?
class ConnectionString
{
public string Conn { get; set; }
public string Server { get; set; }
public string user { get; set; }
public string pass { get; set; }
}
class MainClass
{
static int Main(string[] args)
{
// Test if input arguments were supplied:
if (args.Length == 0)
{
System.Console.WriteLine("No parameters specified.");
return 1;
}
List<ConnectionString> connections = new List<ConnectionString>():
ConnectionString connec = null;
for (int i = 0; i < args.Length; i++)
{
if (args[i].StartsWith("-s"))
{
if (connec != null)
{
connec.Server = args[i].Substring(2);
}
continue;
}
if (args[i].StartsWith("-u"))
{
if (connec != null)
{
connec.user = args[i].Substring(2);
}
continue;
}
if (args[i].StartsWith("-p"))
{
if (connec != null)
{
connec.pass = args[i].Substring(2);
}
continue;
}
connec = new ConnectionString();
connec.Conn = args[i];
connections.Add(connec);
}
// Do What you need to do from here
return 0;
}
}
答案 2 :(得分:0)
CommandLineUtils具有此功能, 参见fake-git example。
另一种可能性是官方System.CommandLine,请参见wiki example