2010-11-27 13 views
2

こんにちは 私は方法が怒鳴るリストされています: CodeContract.Requires(param!= null)は、paramがnullでないことを証明しませんか?

public static PasswordCredential Create(string password, string username, string pinCode = null) 
    { 
     Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(password), "Invalid Argument: password"); 
     Contract.Requires<ArgumentException>(!string.IsNullOrWhiteSpace(username), "Invalid Argument: username"); 

     PasswordCredential credential = new PasswordCredential(); 
     UTF8Encoding encoder = new UTF8Encoding(); 
     SHA512Managed sha512hasher = new SHA512Managed(); 


     credential.PasswordHash = sha512hasher.ComputeHash(encoder.GetBytes(password)); <-- Requires unproven: s != null 
     credential.Username = username; 
     credential.PinCode = pinCode; 

     return credential; 
    } 

が、これはContract.Requires式を証明していないことを意味するのでしょうか?もしそうなら、それは何のために使われますか? :?

UPDATE


[OK]を、私は、コード契約の非常に奇妙な行動を発見しました。私はこの方法を別のプロジェクトに移しました。これ以上の証明されていない警告は必要ありません。次に、私は元のプロジェクトに戻り、メッセージウィンドウで、私はこの行を見つけました: メッセージ1 CodeContracts:推奨前提条件:Contract.Requires(password!= null); このアイテムをダブルクリックすると、PasswordCredentialのPinCodeプロパティに移動します。

 [DataMember] 
    public string PinCode 
    { 
     get { return _PinCode; } 
     set { _PinCode = value == null ? null : value.Trim(); } <-- I'm navigated here 
    } 

警告項目をクリックすると、encoder.GetBytes(パスワード)行に移動します。 何が問題なのか分かりません。バグですか?

+0

ランタイムチェックを有効にしていますか?これがなければ、うまく動作しません。 –

+0

実行時と静的の両方。実行時間が満杯に設定されています – Davita

+0

私はこれを再現できません。私はあなたのコードをコピーし、警告を受け取りません。 'contract.Requires'の' password'をコメントアウトすると、同じ警告が表示されます。 –

答えて

1

ok CCに問題があります(私のプロジェクトでのみ再現可能です:D)。私はCCチームにプロジェクトを送り、非常に速い応答を得ました。彼らは調査中で、恐らく次のリリースで修正される予定です。 あなたのサポートのおかげで、とにかく感謝します。

関連する問題