C# Perforce P4 API: Client.GetSyncedFiles 导致异常
C# Perforce P4 API: Client.GetSyncedFiles causes an exception
我正在尝试查看工作区中的文件,最终我想使用 GetSyncedFiles()
来简单地查看文件的当前状态以及它的修订版本,以便我可以提醒用户。但是我不能在没有标志的情况下执行最简单的操作。
异常消息是"GetSyncedFiles has no valid options\r\nParameter name: options"
。
我试过省略文件列表并在选项中设置不同的标志,结果总是一样。
try
{
Perforce.P4.Server srv = new Perforce.P4.Server(new ServerAddress(PerforceServer + ":" + PerforcePort));
Repository epo = new Perforce.P4.Repository(srv);
repo.Connection.UserName = PerforceUser;
repo.Connection.SetClient(PerforceWorkspace);
repo.Connection.Client.Name = PerforceWorkspace;
repo.Connection.Connect(new Perforce.P4.Options());
repo.Connection.Login(PerforcePassword);
List<FileSpec> fileSpecs = new List<FileSpec>();
foreach (var filename in Directory.GetFiles(DirectoryWithTargetFiles))
{
fileSpecs.Add(new FileSpec(new ClientPath(filename)));
}
SyncFilesCmdOptions cmdFlags = new SyncFilesCmdOptions(SyncFilesCmdFlags.None);
FileSpec[] fsa = fileSpecs.ToArray();
var someFiles = m_repo.Connection.Client.GetSyncedFiles(cmdFlags, fsa);//execution gets to here
}
catch (Perforce.P4.P4Exception e)
{
Console.WriteLine(e.Message);
}
catch (Exception ee)
{
//this exception will hit
Console.WriteLine(ee.Message);
}
我的猜测是一个空的选项对象被标记为无效:
如果您查看文档,该选项有许多覆盖默认选项的子classes class
https://www.perforce.com/manuals/p4api.net/p4api.net_reference/html/T_Perforce_P4_Options.htm
您是否尝试过 this one 等选项?或者你试过只传递 null 吗?或省略该行?
repo.Connection.Connect(new Perforce.P4.Options());
来自 source code of the Perforce .NET API in the GitHub repository:
public IList<FileSpec> GetSyncedFiles(Options options, params FileSpec[] files)
{
if (options != null)
{
throw new ArgumentException("GetSynchedFiles has no valid options", "options");
}
return runFileListCmd("have", options, files);
}
可以注意到,如果 options
不是 null
,它会抛出一个 ArgumentException
。
因此,为了使其工作,您必须通过 null
选项:
var someFiles = m_repo.Connection.Client.GetSyncedFiles(null, fsa);
此外,第二个重载将其重定向到相同的方法:
public IList<FileSpec> GetSyncedFiles(IList<FileSpec> toFiles, Options options)
{
return GetSyncedFiles(options, toFiles.ToArray<FileSpec>());
}
我正在尝试查看工作区中的文件,最终我想使用 GetSyncedFiles()
来简单地查看文件的当前状态以及它的修订版本,以便我可以提醒用户。但是我不能在没有标志的情况下执行最简单的操作。
异常消息是"GetSyncedFiles has no valid options\r\nParameter name: options"
。
我试过省略文件列表并在选项中设置不同的标志,结果总是一样。
try
{
Perforce.P4.Server srv = new Perforce.P4.Server(new ServerAddress(PerforceServer + ":" + PerforcePort));
Repository epo = new Perforce.P4.Repository(srv);
repo.Connection.UserName = PerforceUser;
repo.Connection.SetClient(PerforceWorkspace);
repo.Connection.Client.Name = PerforceWorkspace;
repo.Connection.Connect(new Perforce.P4.Options());
repo.Connection.Login(PerforcePassword);
List<FileSpec> fileSpecs = new List<FileSpec>();
foreach (var filename in Directory.GetFiles(DirectoryWithTargetFiles))
{
fileSpecs.Add(new FileSpec(new ClientPath(filename)));
}
SyncFilesCmdOptions cmdFlags = new SyncFilesCmdOptions(SyncFilesCmdFlags.None);
FileSpec[] fsa = fileSpecs.ToArray();
var someFiles = m_repo.Connection.Client.GetSyncedFiles(cmdFlags, fsa);//execution gets to here
}
catch (Perforce.P4.P4Exception e)
{
Console.WriteLine(e.Message);
}
catch (Exception ee)
{
//this exception will hit
Console.WriteLine(ee.Message);
}
我的猜测是一个空的选项对象被标记为无效:
如果您查看文档,该选项有许多覆盖默认选项的子classes class https://www.perforce.com/manuals/p4api.net/p4api.net_reference/html/T_Perforce_P4_Options.htm
您是否尝试过 this one 等选项?或者你试过只传递 null 吗?或省略该行?
repo.Connection.Connect(new Perforce.P4.Options());
来自 source code of the Perforce .NET API in the GitHub repository:
public IList<FileSpec> GetSyncedFiles(Options options, params FileSpec[] files)
{
if (options != null)
{
throw new ArgumentException("GetSynchedFiles has no valid options", "options");
}
return runFileListCmd("have", options, files);
}
可以注意到,如果 options
不是 null
,它会抛出一个 ArgumentException
。
因此,为了使其工作,您必须通过 null
选项:
var someFiles = m_repo.Connection.Client.GetSyncedFiles(null, fsa);
此外,第二个重载将其重定向到相同的方法:
public IList<FileSpec> GetSyncedFiles(IList<FileSpec> toFiles, Options options)
{
return GetSyncedFiles(options, toFiles.ToArray<FileSpec>());
}