可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am attempting to write a c# application that connects to TFS and retrieves work item information. Unfortunately, it seems like all examples of using the TFS SDK are using the default credentials for the current user (i.e. my domain login information). The closest piece of information I found is to use the TeamFoundationServer (String, ICredentials)
constructor, however I cannot find any information for a suitable class that interfaces with the ICredentials
interface (especially since it seems to not be using the System.Net ICredentials but a TeamFoundationServer specific ICredentials).
Does anyone have any insight for logging into TFS with a specific username/password/domain combination?
回答1:
The following code should help you:
NetworkCredential cred = new NetworkCredential("Username", "Password", "Domain"); tfs = new TeamFoundationServer("http://tfs:8080/tfs", cred); tfs.EnsureAuthenticated();
Domain is either the actual domain, or in a Workgroup situation, it would be the name of the server that hosts the TFS Application Tier.
回答2:
For TFS 2015 & 2017, objects and methods above have been (or are being) deprecated. To connect to TFS using specific credentials:
// For TFS 2015 & 2017 // Ultimately you want a VssCredentials instance so... NetworkCredential netCred = new NetworkCredential(@"DOMAIN\user.name", @"Password1"); 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();
Hope this helps.
回答3:
Years down the line, this is how you do it with TFS 2013 API:
// Connect to TFS Work Item Store ICredentials networkCredential = new NetworkCredential(tfsUsername, tfsPassword, domain); Uri tfsUri = new Uri(@"http://my-server:8080/tfs/DefaultCollection"); TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(tfsUri, networkCredential); WorkItemStore witStore = new WorkItemStore(tfs);
If that doesn't work, try to pass the credentials through other Credential
classes (worked for me):
// Translate username and password to TFS Credentials ICredentials networkCredential = new NetworkCredential(tfsUsername, tfsPassword, domain); WindowsCredential windowsCredential = new WindowsCredential(networkCredential); TfsClientCredentials tfsCredential = new TfsClientCredentials(windowsCredential, false); // Connect to TFS Work Item Store Uri tfsUri = new Uri(@"http://my-server:8080/tfs/DefaultCollection"); TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(tfsUri, tfsCredential); WorkItemStore witStore = new WorkItemStore(tfs);