如何使用特定凭据连接到C#中的TFS服务器?

Kal*_*exx 9 c# authentication tfs tfs-sdk

我正在尝试编写连接到TFS的ac#应用程序并检索工作项信息.不幸的是,似乎所有使用TFS SDK的示例都使用当前用户的默认凭据(即我的域登录信息).我找到的最接近的信息是使用TeamFoundationServer (String, ICredentials)构造函数,但是我找不到与ICredentials接口接口的合适类的任何信息(特别是因为它似乎没有使用System.Net ICredentials而是TeamFoundationServer特定的ICredentials).

有没有人对使用特定用户名/密码/域名组合登录TFS有任何见解?

Rob*_*cus 19

以下代码可以帮助您:

NetworkCredential cred = new NetworkCredential("Username", "Password", "Domain");
tfs = new TeamFoundationServer("http://tfs:8080/tfs", cred);
tfs.EnsureAuthenticated();
Run Code Online (Sandbox Code Playgroud)

域是实际域,或者在工作组情况下,它将是承载TFS应用程序层的服务器的名称.

  • 请注意,不推荐使用`TeamFoundationServer`来支持`TfsConfigurationServer`,但此代码也适用于它. (2认同)

小智 13

对于TFS 2015和2017,提及的对象和方法已被(或正在)弃用.

要使用特定凭据连接到TFS:

// For TFS 2015 & 2017

// Ultimately you want a VssCredentials instance so...
NetworkCredential netCred = new NetworkCredential(@"user.name", @"Password1", "DOMAIN");
WindowsCredential winCred = new WindowsCredential(netCred);
VssCredentials vssCred = new VssClientCredentials(winCred);

// Bonus - if you want to remain in control when
// credentials are wrong, set 'CredentialPromptType.DoNotPrompt'.
// This will thrown exception 'TFS30063' (without hanging!).
// Then you can handle accordingly.
vssCred.PromptType = CredentialPromptType.DoNotPrompt;

// Now you can connect to TFS passing Uri and VssCredentials instances as parameters
Uri tfsUri = new Uri(@"http://tfs:8080/tfs");
var tfsTeamProjectCollection = new TfsTeamProjectCollection(tfsUri, vssCred);

// Finally, to make sure you are authenticated...
tfsTeamProjectCollection.EnsureAuthenticated();
Run Code Online (Sandbox Code Playgroud)