2012-10-01 1 views
1

SharpSvn .NET 라이브러리 사용 경험이있는 경우 SVN 커밋 중에 커밋 작성자를 설정하는 데 전문 지식을 사용할 수 있습니다. 나는 몇 가지 시도를했지만 TortoiseSVN에 사용자가 저장되어 있지 않으면 모두 SvnRepisitoryIOException을 발생시킵니다. 그러나 상황에 따라 다른 사용자 자격 증명을 사용하려고합니다. 사용자의 기본 자격 증명을 저장 한 경우 TortoiseSVN은 설정> 저장된 데이터> 인증 된 데이터에 TortoiseSVN을 저장하고 해당 인증 된 사용자를 커밋 작성자로 사용하여 파일을 커밋 할 수 있습니다. 여기서 "지우기"를 클릭하면 SharpSVN은 커밋 중에 누가 인증해야하는지 알 수 없습니다.SharpSvn에서 커밋 작성자 설정 .NET 라이브러리에서 SvnRepisitoryIOException 예외가 발생했습니다

클래스에 다음 지시문이 있다고 가정합니다. SharpSvn; SharpSvn.Security를 ​​사용하는 ; Windows 용 VisualSVN 서버 무료 버전을 사용하고 있습니다. 그리고 두 명의 사용자가 있습니다. 하나는 "user1"이고 하나는 "pass1"이라는 암호로, 아래 예제에서 문제가 간단하게 유지됩니다.

이 예외가 throw되지 않도록하고 작성자 (내 커밋 로그에서)에 대해 다른 사용자를 사용하여 커밋 할 수 있습니까?

시도 # 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 : (세부 사항에 따라) 실패 커밋 : ===> SharpSvn.SvnRepositoryIOException : URL '은 https에서 저장소에 연결할 수 없습니다 : // MYCOMPUTER/SVN/demo_repo/demo_project/트렁크/file.txt '-> SharpSvn.SvnRepositoryIOException : 옵션' ': 서버 인증서 확인 실패 : 발급자가 신뢰할 수 없음 (https : // mycomputer) --- 내부 예외 스택 추적 끝 --- --- 끝 내부 예외 스택 추적의 SharpSvn.SvnClientArgs.HandleResult (SvnClientContext 클라이언트, SvnException 오류, 개체 대상)에서 SharpSvn.SvnClientArgs.HandleResult (SvnClientContext 클라이언트, svn_error_t * 오류, 개체 대상)에서 ..... *

새로운 코드 :

  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); 
관련 문제