我正在尝试在Visual Studio 2013中构建团队资源管理器的扩展。我在http://31og.com/post/getting-start-with-a-team-explorer-plugin-for-vs-2013-part-3找到了博客,它通过添加导航项和页面的步骤,但当我运行项目时,我没有看到扩展。
输出中没有错误。我可以看到构造函数被调用,但是没有添加任何东西到团队资源管理器。
下面是我们当前的代码:namespace UoA.Cecil.VsTools.WindowPanes
{
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using System.Drawing;
using System.Runtime.CompilerServices;
using Microsoft.TeamFoundation.Controls;
using Microsoft.VisualStudio.Shell;
[TeamExplorerNavigationItem(TeamExplorerGuids.TimesheetNavigationItem, 100)]
public class TimesheetTeamExplorerNavigationItem
: ITeamExplorerNavigationItem
{
private readonly IServiceProvider serviceProvider;
private bool isVisible;
[ImportingConstructor]
public TimesheetTeamExplorerNavigationItem([Import(typeof(SVsServiceProvider))] IServiceProvider serviceProvider)
{
this.serviceProvider = serviceProvider;
}
public event PropertyChangedEventHandler PropertyChanged;
public Image Image
{
get { return Resources.TimesheetImage; }
}
public bool IsVisible
{
get { return this.isVisible; }
private set
{
this.isVisible = value;
this.FirePropertyChanged();
}
}
public string Text
{
get { return "Timesheet"; }
}
public void Dispose()
{
}
public void Execute()
{
// Do something here
}
public T GetService<T>()
{
if (this.serviceProvider != null)
{
return (T)this.serviceProvider.GetService(typeof(T));
}
return default(T);
}
public void Invalidate()
{
}
private void FirePropertyChanged([CallerMemberName] string propertyName = null)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
你知道为什么会这样吗?
当您连接到Team Project时,您将能够经常看到该按钮。验证CurrentContext属性是否不为空并携带连接的TFS上下文。
或者,您还可以验证构造函数中的serviceProvider
字段是否为空。
可见性通常在Invalidate
方法中处理,如下所示。我已经实现了以下我的团队房间扩展。
public override void Invalidate()
{
if (CurrentContext != null && CurrentContext.HasCollection && CurrentContext.HasTeamProject)
{
IsVisible = true;
}
else
{
IsVisible = false;
}
}