Пожалуйста, помогите мне очистить кэшированные учетные данные TFS с помощью кода на C #. Я использую TFS API для доступа к исходному коду, размещенному на сервере TFS Dev ops по адресу https://dev.azure.com
иногда (после изменения пароля домена) возникает ошибка 401 при доступе к серверу с исходным кодом. Ниже приведен пример кода, используемого для подключения:
var u = "https://dev.azure.com/orgid";
var vssCred = new VssClientCredentials();
if (cacheCred)
vssCred.Storage = new VssClientCredentialStorage(); // tried with storage and without
Logger.Debug("getting vsts collection for url:{0}", u);
TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(u, vssCred);
try
{
Logger.Debug("authenticating");
tpc.Authenticate();
tpc.GetService<VersionControlServer>();
использует пакеты Microsoft.TeamFoundationServer.ExtendedClient.15.131.1
и Microsoft.TeamFoundationServer.Client.15.131.1
.
Я пытался очистить кэшированные учетные данные, используя следующий код:
IEnumerable<string> ClearCachedTokens(VssCredentials cred, Uri address)
{
if (cred == null) return null;
var res = new Collection<string>();
foreach (VssCredentialsType enumValue in Enum.GetValues(typeof(VssCredentialsType)))
try
{
var token = cred.Storage.RetrieveToken(address, enumValue);
if (token != null)
{
var tokenData = string.Join(";", token.Properties.Select(_ => string.Format("{0}={1}", _.Key, _.Value)));
Logger.Debug("got token {0} {1}", enumValue, tokenData);
cred.Storage.RemoveToken(address, token);
res.Add(address.ToString());
}
}
catch (Exception ec)
{
Logger.Warn("can't clear token type:{0} error:{1}", enumValue, ec.Message);
}
return res;
}
но он не возвращает никаких записей, и ошибка все еще сохраняется.
Однако ошибка исчезает, когда я удаляю содержимое %appdata%Local\Microsoft\Team Foundation\7.0\Cache
и запускаю команду tf.exe get
. Он запрашивает у меня логин и пароль, а затем ошибка 401 больше не отображается при выполнении tpc.Authenticate();
.
Как очистить кэшированные учетные данные в папке Cache
с помощью TeamFoundationServer.Client
или TeamFoundationServer.ExtendedClient
API?