4

C# SvnClient でユーザー名を取得する方法が見つからないようです。

コマンド ラインでは、コマンド プロンプトに「svn auth」と入力すると、そこにユーザー名が表示されます。

ただし、C# SvnClient API ではそれほど単純ではありません。

API には「Authorization」プロパティがありますが、残念ながら、ユーザー名を取得するための直接の関数呼び出しはありません。

誰でも方法を知っていますか?

4

1 に答える 1

0

長いソロ検索の後、私はそれが可能であることを発見しました. -- かわいくないけど

var cachedItems = SvnClient.Authentication.GetCachedProperties(SvnAuthenticationCacheType.UserNamePassword)

残念ながら、これはユーザー名またはパスワードのパブリック フィールドを返しません。ただし、これには、ユーザー名/パスワードを取得するために使用できる「_filename」というプライベート フィールドがあります。--- リフレクションを使用してアクセスできます。

foreach (var item in cachedItems)
{
    ///find the matching Uri to the repository you want
    if (item.RealmUri.AbsoluteUri == ...)
    {
        var type = item.GetType();
        var fields = type.GetFields();

        var filename = fields.First(x => x.Name == "_filename").GetValue(item);

        ///Now just need to parse the file
        using (var streamReader = new StreamReader(new FileStream(filename, FileMode.Open)))
        {
            while (streamReader.ReadLine() != "username") {}
            streamReader.ReadLine(); ///There is 1 garbage line after username before the actual username
            return streamReader.ReadLine();
        }
    }
}
于 2018-06-16T20:35:42.827 に答える