Visual Studio 可扩展性:返回的 IChangesExt 服务始终为空
Visual Studio Extensibility: IChangesExt service returned is always null
我正在尝试为我的 Visual Studio 2015 扩展 Diff All Files. I have everything working properly for the TFVC Team Explorer pages, and am trying to now have my extension show up on the Git Changes and Git History pages as well. In order to be able to detect the pending changes on the Git Changes page I need to get a handle to the IChangesExt service. This page shows how to do it 添加 Git 支持,但由于某些原因它对我不起作用;我总是得到一个空值 return 返回,而不是预期的 IChangesExt 实例。
以下是该网站的相关代码片段:
Microsoft.TeamFoundation.Controls.ITeamExplorer teamExplorer;
teamExplorer = base.GetService(typeof(Microsoft.TeamFoundation.Controls.ITeamExplorer)) as Microsoft.TeamFoundation.Controls.ITeamExplorer;
Microsoft.TeamFoundation.Controls.ITeamExplorerPage teamExplorerPage;
Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt changesExt;
teamExplorerPage = teamExplorer.NavigateToPage(new Guid(pageGuid), null);
changesExt = teamExplorerPage.GetExtensibilityService(typeof(Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt)) as Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt;
我的代码略有不同,因为我的代码会在 Git 更改 window 打开时自动执行,因此我不需要执行 teamExplorer.NavigateToPage() 调用。相反,我使用 teamExplorer.CurrentPage,我可以在调试器中看到它实际上是 Git 更改页面(GitPendingChangesPageVS 是类型),所以我应该进行与示例中相同的调用从网站。这是我在 Git Changes 页面的 Loaded() 函数中的代码。请注意,我尝试以 4 种不同的方式获取 IChangesExt 服务,但所有方式都只是 return null。
public override void Loaded(object sender, SectionLoadedEventArgs e)
{
base.Loaded(sender, e);
// Find the Pending Changes extensibility service and save a handle to it.
var service = this.GetService<IChangesExt>();
var teamExplorer = this.GetService<ITeamExplorer>();
var service2 = teamExplorer.GetService(typeof(IChangesExt)) as IChangesExt;
var service3 = teamExplorer.CurrentPage.GetExtensibilityService(typeof(IChangesExt)) as IChangesExt;
var service4 = teamExplorer.CurrentPage.GetService<IChangesExt>();
...
}
知道我做错了什么吗?
该扩展是开源的,所以如果您愿意,可以 download the source from here(确保您获得 GitInitialFunctionality 分支)并查看。相关代码在GitChangesSection.cs文件中。
我也发了this question on the MSDN forums,希望经常光顾这些论坛的人可以帮助我。
如有任何建议,我们将不胜感激。谢谢!
我找到了问题的根源。我只是注意到在 VS 2013 中一切正常,但在 VS 2015 中却没有。检查我的参考资料后,我发现我的 VS 2015 项目引用了 2013 (v12.0) Microsoft.TeamFoundation.Git.Controls.dll,这是包含的程序集IChangesExt 接口。我将 VS 2015 (v14.0) 版本的 dll 添加到我的解决方案并更改了我的 VS 2015 项目以引用它,现在它按预期工作:)
我正在尝试为我的 Visual Studio 2015 扩展 Diff All Files. I have everything working properly for the TFVC Team Explorer pages, and am trying to now have my extension show up on the Git Changes and Git History pages as well. In order to be able to detect the pending changes on the Git Changes page I need to get a handle to the IChangesExt service. This page shows how to do it 添加 Git 支持,但由于某些原因它对我不起作用;我总是得到一个空值 return 返回,而不是预期的 IChangesExt 实例。
以下是该网站的相关代码片段:
Microsoft.TeamFoundation.Controls.ITeamExplorer teamExplorer;
teamExplorer = base.GetService(typeof(Microsoft.TeamFoundation.Controls.ITeamExplorer)) as Microsoft.TeamFoundation.Controls.ITeamExplorer;
Microsoft.TeamFoundation.Controls.ITeamExplorerPage teamExplorerPage;
Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt changesExt;
teamExplorerPage = teamExplorer.NavigateToPage(new Guid(pageGuid), null);
changesExt = teamExplorerPage.GetExtensibilityService(typeof(Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt)) as Microsoft.TeamFoundation.Git.Controls.Extensibility.IChangesExt;
我的代码略有不同,因为我的代码会在 Git 更改 window 打开时自动执行,因此我不需要执行 teamExplorer.NavigateToPage() 调用。相反,我使用 teamExplorer.CurrentPage,我可以在调试器中看到它实际上是 Git 更改页面(GitPendingChangesPageVS 是类型),所以我应该进行与示例中相同的调用从网站。这是我在 Git Changes 页面的 Loaded() 函数中的代码。请注意,我尝试以 4 种不同的方式获取 IChangesExt 服务,但所有方式都只是 return null。
public override void Loaded(object sender, SectionLoadedEventArgs e)
{
base.Loaded(sender, e);
// Find the Pending Changes extensibility service and save a handle to it.
var service = this.GetService<IChangesExt>();
var teamExplorer = this.GetService<ITeamExplorer>();
var service2 = teamExplorer.GetService(typeof(IChangesExt)) as IChangesExt;
var service3 = teamExplorer.CurrentPage.GetExtensibilityService(typeof(IChangesExt)) as IChangesExt;
var service4 = teamExplorer.CurrentPage.GetService<IChangesExt>();
...
}
知道我做错了什么吗?
该扩展是开源的,所以如果您愿意,可以 download the source from here(确保您获得 GitInitialFunctionality 分支)并查看。相关代码在GitChangesSection.cs文件中。
我也发了this question on the MSDN forums,希望经常光顾这些论坛的人可以帮助我。
如有任何建议,我们将不胜感激。谢谢!
我找到了问题的根源。我只是注意到在 VS 2013 中一切正常,但在 VS 2015 中却没有。检查我的参考资料后,我发现我的 VS 2015 项目引用了 2013 (v12.0) Microsoft.TeamFoundation.Git.Controls.dll,这是包含的程序集IChangesExt 接口。我将 VS 2015 (v14.0) 版本的 dll 添加到我的解决方案并更改了我的 VS 2015 项目以引用它,现在它按预期工作:)