如何订阅TFS';s VersionControlServer事件在C#中编程?

如何订阅TFS';s VersionControlServer事件在C#中编程?,c#,visual-studio,tfs,tfs-2015,visual-studio-extensions,C#,Visual Studio,Tfs,Tfs 2015,Visual Studio Extensions,我正在编写一个Visual Studio 2015扩展,我想在其中订阅一些TFS的VersionControlServer事件。但事实上,所有事件都没有被炒鱿鱼。我想我已经知道为什么了,但我不知道如何让它为我的目的工作。另外,微软的文档也很差,而且根本不存在 问题是:有没有办法从我的分机订阅活动 我已经研究了很多线程,但找不到任何对我有用的东西。我的代码如下所示: var tfsProjectCollection = TfsTeamProjectCollectionFactory.GetTeam

我正在编写一个Visual Studio 2015扩展,我想在其中订阅一些TFS的VersionControlServer事件。但事实上,所有事件都没有被炒鱿鱼。我想我已经知道为什么了,但我不知道如何让它为我的目的工作。另外,微软的文档也很差,而且根本不存在

问题是:有没有办法从我的分机订阅活动

我已经研究了很多线程,但找不到任何对我有用的东西。我的代码如下所示:

var tfsProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection (TfsPath, new UICredentialsProvider ());
var tfsVersionControlServer = tfsProjectCollection.GetService<VersionControlServer> ();

tfsVersionControlServer.CommitCheckin += TfsVersionControlServer_CommitCheckin;
var tfsProjectCollection=tfstreamprojectcollectionfactory.GetTeamProjectCollection(TfsPath,新UICredentialsProvider());
var tfsVersionControlServer=tfsprrojectcollection.GetService();
tfsVersionControlServer.CommitCheckin+=tfsVersionControlServer\u CommitCheckin;
这里的问题是,VersionControlServer与Visual Studio使用的实例不同。例如,如果我制作了一个搁置集,事件就不会触发。只有当我使用我这里的实例以编程方式进行搁置时,我才会触发事件

我的分机工作正常,除了这个问题。我的扩展正在启动时初始化,并在Visual Studio启动期间订阅事件。现在,如果我创建搁置集,我希望在搁置更改之前启动该事件


提前感谢

正如我已经说过的,我找到了解决问题的方法(有一些缺点)

假设我的扩展名是MyExtension:

首先,我在MyExtension.cs中添加了一个属性

 public EnvDTE.DTE DTEObject { get; set; }
然后在MyExtension包中.cs中,我可以在包初始化后立即获取DTEObject:

protected override void Initialize ()
{
  MyExtension.Initialize (this);
  base.Initialize ();
  MyExtension.Instance.DTEObject = (EnvDTE.DTE)base.GetService (typeof (Microsoft.VisualStudio.Shell.Interop.SDTE));
}
现在我可以在扩展中使用DTEObject,并通过GetObject获取任何对象。在我的例子中,我得到的是VersionControlEx的当前实例

var tfsVersionControlExt = DTEObject.GetObject ("Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt") as Microsoft.VisualStudio.TeamFoundation.VersionControl.VersionControlExt;
然后,我就可以获取此实例的VersionControlServer:

TfsVersionControlServer = tfsVersionControlExt.Explorer.Workspace.VersionControlServer;
这里的缺点是,VisualStudio的新实例需要打开源代码管理资源管理器。如果用户在没有资源管理器的情况下启动其Visual Studio,则VersioncontrolServer的值将始终为null


我所做的解决方法是,我等待Studio启动,然后在源代码管理资源管理器中(以编程方式)导航到基本路径,强制Studio加载资源管理器,然后我就能够得到我需要的。我对我的解决方案不太满意,但我会努力工作。如果有更好的解决方案,我在听:)

类似于?我还被困在如何获得正确的实例上。我想我们也有类似的问题。经过几个小时的尝试和错误,我已经想出了一个解决方案,有一些缺点,但我会接受它们。我会尽快/晚些时候发布我的解决方案。这可能非常好,谢谢!我被困在如何获得正确的实例,以便我多次执行某些操作。嗨,Evvi,感谢您的分享,请将您的答复标记为答案,这将帮助其他社区成员更轻松地搜索此有用信息,这只是一个提醒:)