Ответ Джонно очень полезен и точен. Я пошел дальше и создал фрагмент кода для использования отражения для вызова диалога (работает для меня в TFS 2010 SP1). Надеюсь, он будет полезен кому-то еще с тем же вопросом. Как указывалось ранее, этот метод не гарантированно будет работать без изменений в любой будущей версии.
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[]{});
}
}