2009-01-07 18 views
12

Có cách nào để xác định không gian làm việc hiện tại của sln/proj mở trong studio trực quan bằng cách sử dụng API TFS không? Tôi đã thấy làm thế nào các VersionControlServer có thể truy xuất tất cả các không gian làm việc được biết đến, nhưng là có bất cứ điều gì tôi có thể sử dụng để buộc rằng những gì người dùng hiện đang có (hoặc không có) mở?Xác định không gian làm việc 'hiện tại' thông qua API TFS?

Trả lời

1

Nếu bạn có thể xác định đường dẫn vật lý của giải pháp hoặc tệp dự án, thì bạn có thể truy vấn tệp đó trong TFS và bạn sẽ thấy không gian làm việc nào được ánh xạ tới vị trí tệp cục bộ đó.

+0

Ah. Tôi đã không nhận ra rằng con đường được ánh xạ cho một không gian làm việc phải là duy nhất, nhưng nó có ý nghĩa. Thật sự cảm ơn! – JPero

10

Có một cách ghi đè khác cho phương thức GetWorkspace của đối tượng được hiển thị tức thời VersionControlServer. Bạn có thể gọi GetWorkspace với đường dẫn cục bộ như Bernhard, nhưng bạn cũng có thể gọi nó bằng tên không gian làm việc và chủ sở hữu không gian làm việc. Vì tên vùng làm việc mặc định là tên máy tính cục bộ, bạn thường có thể lấy đi bằng cách sử dụng Environment.MachineName, nhưng sẽ luôn có nhà phát triển thay đổi tên vùng làm việc.

Ví dụ:

TeamFoundationServerFactory _tfs = TeamFoundationServerFactory.GetServer(server); 
      _tfs.EnsureAuthenticated(); 

VersionControlServer _vcs = (VersionControlServer)_tfs.GetService(typeof(VersionControlServer)); 
Workspace _ws = _vcs.GetWorkspace(Environment.MachineName, Environment.UserName); 
1

Vấn đề với cách tiếp cận từ Dave Teply là nó giả sử bạn đã có một thể hiện của một VersionControlServer hoặc ít nhất là TeamFoundationServerUri.

Có một cách mạnh mẽ hơn mặc dù, using the Workstation class. Ricci Gian Maria has written a quite extensive blog post về chủ đề này. Đoạn mã dưới đây là yếu tố cần thiết của bài đăng đó:

Sử dụng lớp Workstation để lấy WorkspaceInfo cho đường dẫn bạn đang tìm kiếm, điều này sẽ tìm kiếm không gian làm việc cho tất cả máy chủ TFS được đăng ký trên máy trạm đó để xem có khớp không :

Workstation workstation = Workstation.Current; 
WorkspaceInfo info = workstation.GetLocalWorkspaceInfo(path); 

Bây giờ bạn có WorkspaceInfo, bạn có thể kiện nó để kết nối với TFS, thông tin không gian làm việc chứa ProjectCollectionUri cho bộ sưu tập dự án nhóm cụ thể đó. Và từ đó các trường hợp Workspace:

TfsTeamProjectCollection collection = new TfsTeamProjectCollection(info.ServerUri); 
Workspace workspace = info.GetWorkspace(collection); 

Sử dụng các bộ sưu tập hoặc không gian làm việc để sau đó nhận được quyền truy cập vào các VersionControlServer:

VersionControlServer versionControlServer = collection.GetService<VersionControlServer>(); 
Các vấn đề liên quan