2011-11-25 39 views
5

Tôi đang viết một ứng dụng tích hợp với TFS thông qua SDK chính thức để tự động hóa và hỗ trợ các tác vụ phổ biến khác nhau. Mặc dù phần lớn là tự động hóa và API TFS hiển thị khá nhiều mọi thứ tôi cần, một số hành động cần sự can thiệp của người dùng vì vậy tôi cần hiển thị thông tin cho người dùng.Hiển thị cửa sổ lịch sử mục với TFS SDK

Tôi đã tìm thấy các phương pháp như Difference.VisualDiffItems cho phép tôi dễ dàng so sánh tệp trực quan bằng cùng một giao diện người dùng mà Visual Studio sử dụng. Tôi cũng cần hiển thị lịch sử của mục (bao gồm các chi nhánh, đổi tên, v.v.) và tôi rất thích sử dụng giao diện người dùng tích hợp thay vì phải tự viết. UI lịch sử mục thực sự khá phức tạp và tôi nghĩ rằng MS sẽ cung cấp nó trong SDK, nhưng tôi dường như không thể tìm thấy nó.

Bất kỳ ai có thể xác nhận rằng SDK TFS không cung cấp các phương pháp cần thiết để trực quan hóa lịch sử của mặt hàng hoặc chỉ cho tôi đúng hướng nếu nó hoạt động?

Trả lời

4

Sử dụng ILSpy trên tiện ích TF.exe bạn có thể thấy rằng điều khiển giao diện người dùng đang được sử dụng để xem lịch sử là Microsoft.TeamFoundation.VersionControl.Controls.DialogHistory. Lớp này là nội bộ, trừ khi bạn hài lòng với việc sử dụng sự phản chiếu, bạn sẽ không thể tự mình tạo ra đối tượng này.

Trên thực tế, tìm kiếm cho rằng tên lớp đưa lên trang social.msdn này: http://social.msdn.microsoft.com/Forums/ar/tfsversioncontrol/thread/9a10473e-d381-4e83-bde9-dd423f430feb

Có một dòng mà có thể phù hợp nhất cho câu hỏi của bạn là từ Buck Hodges: "Bạn có tùy chọn để Vì chúng không được công khai, chúng tôi có thể thay đổi chúng từ bản phát hành sang bản phát hành (bao gồm cả gói dịch vụ), vì vậy bạn chấp nhận rủi ro bị hỏng "

Cách khác là gọi TF với dòng lệnh trực tiếp (bằng cách tham chiếu trực tiếp TF.exe và tải nó trong cùng một tiến trình HOẶC theo s tarting một quá trình mới với dòng lệnh yêu cầu). Trong cả hai trường hợp, bạn có thể sẽ phải làm việc với các thông báo lỗi được gửi đến stdout nơi bạn có thể hoặc có thể không muốn chúng.

Hy vọng điều này sẽ hữu ích.

4

Câu trả lời của Jonno rất hữu ích và nổi bật. Tôi đã đi trước và tạo ra một đoạn mã để sử dụng sự phản chiếu để gọi ra hộp thoại (làm việc cho tôi trong TFS 2010 SP1). Hy vọng rằng nó sẽ được sử dụng cho người khác với cùng một câu hỏi. Như đã nêu trước đây, phương pháp này không được đảm bảo để hoạt động mà không có thay đổi trong bất kỳ phiên bản nào trong tương lai.

public class TfsHistoryDialogWrapper 
{ 
    private readonly Type _dialogHistoryType; 
    private readonly object _historyDialogInstance; 

    public TfsHistoryDialogWrapper(VersionControlServer versionControl, string historyItem, VersionSpec itemVersion, int itemDeletionId, RecursionType recursionType, VersionSpec versionFrom, VersionSpec versionTo, string userFilter, int maxVersions, bool? slotMode) 
    { 
     Assembly tfsAssembly = typeof(Microsoft.TeamFoundation.VersionControl.Controls.LocalPathLinkBox).Assembly; 
     _dialogHistoryType = tfsAssembly.GetType("Microsoft.TeamFoundation.VersionControl.Controls.DialogHistory"); 

     _historyDialogInstance = _dialogHistoryType.GetConstructor(
           BindingFlags.NonPublic | BindingFlags.Instance, 
           null, 
           new Type[]{typeof(VersionControlServer), typeof(string), typeof(VersionSpec), typeof(int), typeof(RecursionType), typeof(VersionSpec), typeof(VersionSpec), typeof(string), typeof(int), typeof(bool?)}, 
           null).Invoke(new object[]{ versionControl, historyItem, itemVersion, itemDeletionId, recursionType, versionFrom, versionTo, userFilter, maxVersions, slotMode }); 
    } 

    public void ShowDialog() 
    { 
     _dialogHistoryType.GetMethod("ShowDialog", new Type[]{}).Invoke(_historyDialogInstance, new object[]{}); 
    } 

} 
Các vấn đề liên quan