2

我将 SharpSVN dll 与我的 Visual Studio 2010 一起使用以获取最新的修订号,以便我可以使用此编号对我的项目进行版本控制。我在下面尝试了这段代码,但它给了我错误提示:

Can't determine the user's config path

我什至不明白那是什么意思。我要做的就是提供 svn 链接、我的用户名和密码等凭据并获取最新的修订号。

这是我到目前为止尝试的代码:

using(SvnClient client = new SvnClient())
{
    //client.LoadConfiguration(Path.Combine(Path.GetTempPath(), "Svn"), true);
    Collection<SvnLogEventArgs> list;
    client.Authentication.DefaultCredentials = new NetworkCredential("john.locke", "s7y5543a!!");

    SvnLogArgs la = new SvnLogArgs();
    client.GetLog(new Uri("https://100.10.20.12/svn/P2713888/trunk/src/"), la, out list);

    string sRevisionNumber = string.Empty;
    int iRevisionNumber = 0;
    foreach(SvnLogEventArgs a in list)
    {
       if (Convert.ToInt32(a.Revision) > iRevisionNumber)
       {
           iRevisionNumber = Convert.ToInt32(a.Revision);
       }
    }
    RevisionNumber.Text = iRevisionNumber.ToString();
}

也可以选择其他获取修订号的方法作为答案。

4

1 回答 1

6

我也遇到了这个问题——使用前需要在 SvnClient 上查找/设置属性。这是我最终使用的。尝试使用这种方法而不是仅仅实例化您的客户端对象——如果它不存在,它将自动创建一个配置文件夹:

private SvnClient GetClient()
{
    SvnClient client = new SvnClient();

    // Note: Settings creds up here is optional
    // client.Authentication.DefaultCredentials = _creds;

    string configPath = Path.Combine(Path.GetTempPath(), "sharpsvn");
    if (!Directory.Exists(configPath))
    {
        Directory.CreateDirectory(configPath);
    }
    client.LoadConfiguration(configPath, true);

    return client;
}

或者,如果您想最小化文件 IO 检查以查看目录是否存在,您可以尝试 LoadConfiguration,并且仅在调用失败时创建并重新分配目录,但每次仅检查更简单。

无论如何,您可以使用以下代码获取某个位置的最新修订号:

public long GetLatestRevisionNumber(Uri svnPath)
{
    using (SvnClient client = GetClient())
    {
        SvnInfoEventArgs info;
        client.GetInfo(svnPath, out info);
        return info.LastChangeRevision;
     }
}
于 2013-04-11T13:18:33.520 回答