2011-04-29 2 views
1

내 프로젝트에서 SVN과 통신하기 위해 SharpSvn을 사용하고 있습니다. 일부 SVN repostories 들어, 나는 이미 사용자 이름과 비밀 번호를 알고 있지만, 다른 사람은 그렇지 않습니다. 따라서, 나는 System.Net.ICredentials (의사 코드)의 내 자신의 구현의 인스턴스로 SvnClient.Authentication.DefaultCredentials 속성을 설정 :이 알려진 자격 증명을 잘 작동제공된 DefaultCredentials가 null을 반환하면 SharpSvn의 SvnClient에서 NullReferenceException이 발생합니다.

public class MyCredentials : ICredentials 
{ 
    public NetworkCredential GetCredential(Uri uri, string authType) 
    { 
     if (AreCredentialsKnown(uri)) 
      return new NetworkCredential("KnownUserName", "KnownPassword"); 
     else 
      return null; 
    } 
} 

. 자격 증명이 알려진하고 있지 않으면 NullReferenceException는 SharpSvn에서 발생

Object reference not set to an instance of an object. 
    at System.Net.NetworkCredential.InternalGetUserName() 
    at System.Net.NetworkCredential.get_UserName() 
    at SharpSvn.Implementation.SvnCredentialWrapper.OnUserNamePassword(Object sender, SvnUserNamePasswordEventArgs e) in f:\qqn\sharpsvn-dist-1.6\src\sharpsvn\svnauthentication.h:line 619 

이 분명히 나는 ​​GetCredential 방법에서 null을 반환한다는 사실에 기인한다. 그러나, 분명 the MSDN documentation on the ICredentials interface으로 적혀있다 :

GetCredential 메소드는 지정된 URI 및 권한 부여 체계와 관련된 자격 증명을 포함하는 NetworkCredential 인스턴스를 반환합니다. 자격 증명을 사용할 수없는 경우 GetCredential 메서드는 null을 반환합니다.

SharpSvn에서 버그입니까? 그렇지 않으면 자격 증명을 알 수 없을 때 무엇을 반환해야합니까?

편집 : 난 그냥 자격 증명이 알 수없는 것을 SharpSvn에 표시하기 위해 new NetworkCredentials() 대신 null의 반환 할 수 있다는 것을 발견. 아직도, 나는 이것이 null을 반환하는 것이 똑같이 잘 작동해야하므로 SharpSvn의 버그라고 생각합니다.

답변

2

.DefaultCredentials는 Subversion 라이브러리에 하나의 명시적인 사용자 이름과 암호를 제공하기위한 유일한 방법입니다.

보다 고급 프롬프트 메커니즘이 필요한 경우 .UserNamePassword 이벤트를 SvnClient.Autorization에 연결해야합니다. 또한 암호를 저장해야하는 경우 관리 할 수 ​​있습니다.

일부 표준 대화 상자를 후크하는 SharpSvn.UI.dll의 기본 구현이 있습니다.

관련 문제