2011-04-29 101 views
1

我在我的項目中使用SharpSvn與SVN進行通信。對於某些SVN版本庫,我已經知道用戶名和密碼,而對於其他用戶,我不知道。因此,我的SvnClient.Authentication.DefaultCredentials屬性設置爲我自己的實現的System.Net.ICredentials(僞代碼)的一個實例:當提供的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中的錯誤嗎?否則,當憑證未知時,我應該返回什麼?

編輯:我才發現,原來我可以返回new NetworkCredentials()代替null以指示SharpSvn的憑據是未知的。不過,我認爲這是SharpSvn中的一個錯誤,因爲返回null應該同樣適用。

回答

2

.DefaultCredentials只是向Subversion庫提供一個明確的用戶名和密碼的替代方案。

如果您需要更高級的提示機制,您應該在SvnClient.Autorization上掛接.UserNamePassword事件。這還允許管理是否應該保存密碼等。

SharpSvn.UI.dll中存在一個默認實現,它掛鉤了一些標準對話框。

相關問題