【问题标题】:How can I hook into a check-in event using Event Service?如何使用事件服务挂钩到签到事件?
【发布时间】:2011-12-25 13:08:06
【问题描述】:

这是Team Foundation Server: Getting the Changeset Id from PolicyBase object的后续问题

我想在签到时运行一些代码。上面链接问题中的答案将我指向this page on MSDN

我没有完全理解页面上的解释,我不确定签入事件处理程序将在哪里运行。

这是应该在每个客户端机器上运行的应用程序中,还是需要在实际的 TFS 服务器上运行?

我需要确保每次签入时都会运行签入事件处理程序代码,无论是哪个客户签入。

我尝试下载该 Microsoft 页面上提供的示例代码,但它不起作用。 我可以连接到 TFS 服务器。当我单击“获取已注册事件列表”按钮时,左侧列表框会填充 13 个项目,所有项目的名称都为

Microsoft.TeamFoundation.Server.RegistrationEntry

当我点击其中一个项目时,我会收到一个带有消息的 TypeLoadException

无法从程序集“Microsoft.TeamFoundation, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”加载类型“Microsoft.TeamFoundation.Server.Subscription”

(奇怪的是,这似乎是在引用 VS2010 版本的程序集,即使它是我已链接到项目的 VS2008 版本)。

我在这里做错了什么?

【问题讨论】:

  • 顺便说一句,您需要使用Fusion log viewer. 进行调试,只需确保以管理员身份运行它,打开日志,然后在尝试调试之前重新启动。您将看到 CLR 在哪里寻找程序集,以及什么版本,并从那里确定为什么找不到它(如果您甚至安装了它)。

标签: visual-studio-2010 visual-studio-2008 tfs


【解决方案1】:

库参考

我总是发现在安装后尝试使用 TFS2008 库而不是 2010 库很痛苦。您可以更改引用以使用特定版本的 DLL,但是使用 TFS2010 应该没有任何困难,因为它们向后兼容。

活动订阅

对于 TFS2010,最简单的方法是在 c:\Program Files\Microsoft Team Foundation Server 2010\Application Tier\Web Services\bin\Plugins 中放置一个自定义 DLL,这些编写起来相当简单,只涉及为 CheckinNotification 实现 ISubscriber。

Example Code
http://embeddedworkitems.codeplex.com/SourceControl/changeset/view/2611#97271

对于 TFS2008,或者如果您喜欢 TFS2010,您需要使用 SOAP webservices(或 bisubscribe.exe 工具)来订阅事件并自己拥有一个 webservice 以便 tfs 将事件推送到。这是订阅事件的一种更难的方式,所以如果你可以使用 Plugin 方法,我会推荐它(尽管它可以更健壮并且更适合负载分配)。

VSTS Subscription FAQ http://blogs.msdn.com/b/narend/archive/2006/07/27/679571.aspx
Subscribing without a Client SOAP Service http://blogs.msdn.com/b/mrod/archive/2006/09/18/761174.aspx

TFS Deployer 是一个开源项目,它作为 Windows 服务运行并通过 SOAP 服务接收事件通知。它包含一个库(可能是可重用的),其中似乎有一些代码用于接收签入事件

http://tfsdeployer.codeplex.com/SourceControl/changeset/view/57852#2395

使用订阅,您只需要一个应用程序的副本来获取事件并处理它们,它可以在 TFS 服务器上(如果您使用插件方法,则必须如此),但在使用 SOAP 订阅时可以在另一台机器上。

入住政策是替代答案?

根据您正在编码的具体内容,您也许可以编写签入政策。这需要安装在所有客户端机器上,并且不会被所有不同的客户端(例如eclipse)支持,但它可能适合您的需要。我之前给出的在 checkin cmets 中支持嵌入工作项代码的工具的示例还附带了一个 check-in 策略来执行其他检查

http://embeddedworkitems.codeplex.com/SourceControl/changeset/view/2611#97267

【讨论】:

    猜你喜欢
    • 2019-11-11
    • 2019-08-24
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    相关资源
    最近更新 更多