2012-10-01 22 views
1

如果您有使用SharpSvn .NET库的经验,我可以使用您在SVN提交期间设置提交作者的专业知识。我已经尝试了一些东西,但它们都抛出了SvnRepisitoryIOException,除非用户保存在TortoiseSVN中。但是,我想根据情况使用不同的用户凭据。如果我保存了用户的默认凭据,TortoiseSVN会在设置>保存的数据>验证数据中记住它们,并且能够使用该已验证的用户作为提交作者提交文件。如果您在此处单击“清除”,SharpSVN将不知道在提交过程中需要进行身份验证。在SharpSvn .NET库中设置提交作者会抛出SvnRepisitoryIOException异常

假设你在你的类中有这些指令:使用SharpSvn; 使用SharpSvn.Security;我正在使用Windows的免费版VisualSVN服务器。我有两个用户,一个名为“user1”,另一个名为“pass1”,以便在下面的示例中保持简单。

我该如何防止这个异常被引发和提交使用不同的用户作者(在我的提交日志中)?

尝试#1:

using (SvnClient client = new SvnClient()) 
    { 
     client.Authentication.Clear(); // Clear a previous authentication 
     client.Authentication.DefaultCredentials = new System.Net.NetworkCredential("user1", "pass1"); 

     SvnCommitArgs ca = new SvnCommitArgs(); 
     ca.LogMessage = "svn log message created at " + DateTime.Now.ToString(); 
     bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca); 
    } 

尝试#2:

using (SvnClient client = new SvnClient()) 
    { 
     client.SetProperty(("", "svn:author", "user1"); 

     SvnCommitArgs ca = new SvnCommitArgs(); 
     ca.LogMessage = "svn log message created at " + DateTime.Now.ToString(); 
     bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca); 
    } 

尝试#3:

using (SvnClient client = new SvnClient()) 
    { 
     client.Authentication.Clear(); // Clear predefined handlers 
     client.Authentication.UserNamePasswordHandlers 
      += delegate(object obj, SharpSvn.Security.SvnUserNamePasswordEventArgs args) 
     { 
      args.UserName = "user1"; 
      args.Password = "pass1"; 
     }; 

     SvnCommitArgs ca = new SvnCommitArgs(); 
     ca.LogMessage = "svn log message created at " + DateTime.Now.ToString(); 
     bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca); 
    } 

回答

2

得到堆栈后在以管理员身份运行应用程序时进行跟踪,我能够使用框架捕获异常并接受非信任证书颁发者。 (未详细说明):===> SharpSvn.SvnRepositoryIOException:无法连接到URL'存储库'https:// mycomputer/svn/demo_repo/demo_project/trunk/file.txt' - > SharpSvn.SvnRepositoryIOException:''的选项:服务器证书验证失败:发布者不可信(https:// mycomputer) ---内部异常堆栈跟踪结束--- ---结束内部异常堆栈跟踪--- at SharpSvn.SvnClientArgs.HandleResult(SvnClientContext client,SvnException error,Object targets) at SharpSvn.SvnClientArgs.HandleResult(SvnClientContext client,svn_error_t * error,Object targets) ..... *

新代码:

  client.Authentication.Clear(); // Clear predefined handlers 
      client.Authentication.UserNamePasswordHandlers 
       += delegate(object obj, SharpSvn.Security.SvnUserNamePasswordEventArgs args) 
      { 
       args.UserName = "user1"; 
       args.Password = "pass1"; 
      }; 

      client.Authentication.SslServerTrustHandlers​ += 
      delegate(object sender, SvnSslServerTrustEventArgs e) 
      { 
       e.AcceptedFailures = e.Failures; 
       e.Save = true; // Save acceptance to authentication store 
      }; 

      SvnCommitArgs ca = new SvnCommitArgs(); 
      ca.LogMessage = "svn log message created at " + DateTime.Now.ToString(); 
      bool action = client.Commit(@"C:\demo_repo\demo_project\trunk\file.txt", ca);