1

我遇到了 SharpSVN api 的问题。当我尝试使用 SvnClient.Write() 或 SvnClient.Export() 时,会出现以下错误:

存储库的格式错误的 URL

我的代码如下

using(SvnClient client = new SvnClient())
        {
            MemoryStream ms = new MemoryStream();
            client.Authenticator.DefaultCredentials = new NetworkCredential("master","master");
            SvnTarget t1 = new SvnUriTarget(new Uri("http://ETAB-APP:81/repositorio/"));
            SvnTarget t2 = new SvnUriTarget(new Uri("http://ETAB-APP:81/repositorio/Registro e Controle Acadêmico/Administração/0000/Dossiê do Aluno - ADEMIR JOSPE SANGALLI - (2001193) - Curso (000)/DOC ADICIONAL(264839).pdf"));

            client.Write(t2, ms);
            client.Export(t2, "C:\\chups");


        }

这让我发疯,因为如果我尝试使用 t1 作为 SvnTarget 执行此方法,一切正常。但问题是每次我想要获取特定文件时都无法导出所有存储库。

我试图在 URL 的名称前加上一个“@”,即

http://@ETAB-APP:81/repositorio/Registro e Controle Acadêmico/Administração/0000/Dossiê do Aluno - AEMIR JOSPE SANGALLI - (2001193) - Curso (000)/DOC ADICIONAL(264839).pdf

但什么也没发生。

我究竟做错了什么?

PS:对不起,如果我做错了,我是巴西人,我的英语不是很好

4

2 回答 2

0

我发现如果你简单地将任意 URL 传递给 Uri 对象构造函数,它将创建一个 SVN 无法理解的无效 Uri。这可能是由于外来字符或某些不需要被默认 Uri 对象构造函数转义的字符转义。

使用 UriBuilder 对象将 Uri 分解成各个部分,然后将生成的 Uri 传递给 SVN。

// Build Uri by explicitly specifying the constituent parts. 
UriBuilder uriBuilder = new UriBuilder("http", "ETAB-APP", 81, "/repositorio/Registro e Controle Acadêmico/Administração/0000/Dossiê do Aluno - ADEMIR JOSPE SANGALLI - (2001193) - Curso (000)/DOC ADICIONAL(264839).pdf");

using(SvnClient client = new SvnClient())
{
    MemoryStream ms = new MemoryStream();
    client.Authenticator.DefaultCredentials = new NetworkCredential("master","master");
    SvnTarget t2 = new SvnUriTarget(uriBuilder.Uri);
    client.Write(t2, ms);
    client.Export(t2, "C:\\chups");
}
于 2012-02-23T22:49:22.963 回答
0

当我调用sharpsvn通过url获取svn信息时(包含'&',和'/'的结尾)。sharp svn抛出异常。

谢谢sbrogers:

您需要转义网址吗?SVN Api 可能会为您执行此操作,但可能值得尝试通过 msdn.microsoft.com/en-us/library/... 运行它 – sbrogers 2010-12-29 14:05:07

我使用此代码

SvnUriTarget repos = new SvnUriTarget(myUrlString.TrimEnd(new char[] { '/' }));

我的问题解决了。

于 2013-01-19T15:01:20.737 回答