正如评论中所建议的,我最终摆脱了 P4Api,基本上我使用 aSystem.Diagnostics.Process
来调用 p4.exe 并传递一些参数来做我需要做的任何事情。这是我的解决方案:
public bool RunCommand<T>(string command, Func<string, string, T> output,out T outputResult, params string[] args)
{
string logParams = "-zprog=MyApp -zversion=1.1";
Process proc = new Process();
proc.StartInfo.WorkingDirectory = "";
proc.StartInfo.FileName = "p4.exe";
proc.StartInfo.Arguments = logParams + " " + command + " ";
foreach (string s in args)
{
proc.StartInfo.Arguments += s + " ";
}
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
StreamReader strOutput = proc.StandardOutput;
StreamReader strError = proc.StandardError;
outputResult = output(strOutput.ReadToEnd(), strError.ReadToEnd());
proc.WaitForExit();
return true;
}
Func<string, string, T> output
允许我解析进程输出和错误,从 P4 查询中获取所需的数据并将其返回out T outputResult
,例如从工作区路径返回 Depot 路径的命令“where”。
我希望这对其他有类似问题的人有所帮助。