2012-10-01 54 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);