0

对于 FxCop 与 SVN 的集成,

要求:每当开发人员尝试签入 SVN 中的代码时,Fxcop 应该运行并检查所有文件是否符合规则。如果不是,那么在 SVN 中不应该允许文件提交。

实现:在预提交钩子的 SVN 中添加了一个批处理脚本。同样,我首先指出了 FxCop.exe,但它只是打开了一个 fxCop 窗口。其次,我指出 ..\Microsoft Fxcop 10.0\FxCopCmd.exe ,但这一次在 SVN 中提交任何文件时,它会使用一些命令提示符屏幕播放,但最终它会消失,并且 SVN 旁边还允许文件签入。第三,我指向..\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\FxCopCmd.exe,结果过程与第二次尝试相同。

对于 StyleCop 与 SVN 的集成,

要求:与 FxCop 相同

实现:在 StyleCop 的情况下没有这样的命令 exe,所以不知道在批处理脚本中确切指向什么(在 pre-commit 钩子上)

我寻求一个适当的解决方案,就像每次寻找这个查询一样,我只找到了不相关的链接。

谢谢..

4

2 回答 2

1

你不能用 TortoiseSVN 做到这一点。您需要在您的服务器上配置一个预提交挂钩脚本,以便它适用于每个提交,而无论客户端如何,用户都无法绕过它。

这意味着您需要在 Subversion 服务器上正确安装和配置 StyleCop 和 FxCop。然后是一个预提交钩子来适当地调用它们。但要做到这一点,您需要在服务器上保持最新的代码工作副本,然后将事务中的更改应用于它。

完成此操作后,您首先需要考虑这是否是满足您的要求的适当方法。IIRC,事务在预提交阶段不会像实际提交那样“序列化”。也就是说,如果两个用户尝试同时提交,那么首先(成功)完成预提交的人将开始实际提交 - 第二个用户可能会被拒绝,因为他们现在已经过时了。

如果您的预提交挂钩需要很长时间来处理,这可能会给您的用户带来很多挫败感——即使没有上述条件。在上述条件下,如果第二个用户的规则检查运行得比第一个用户快,则第二个用户可以先提交。

但是无论如何,您还需要为每个传入的提交事务提供一个“新”工作副本,因为您需要确保将代码的新状态与存储库中的当前状态进行比较。这意味着每次调用 pre-commit 时都会重新结帐。

等待用户的时间长,服务器上使用的空间很大,还有很多可能会损坏的移动部件。

那么你会怎么做呢?

诸如此类的规则的执行通常在提交后通过持续集成系统进行更好的管理,该系统检查源代码、编译、运行测试等,然后提醒团队谁破坏了构建。这样,您可以让人们以良好的速度前进,而不会在他们等待其他人的提交完成时放慢他们的速度。当每个人都知道整个团队会发现他们违反了标准(FxCop 或 StyleCop 返回“错误”)或整个构建(代码无法编译,或者您的自动化测试失败)时,他们就会开始被对他们的提交更加小心。

于 2013-06-12T13:08:59.303 回答
0

大多数 StyleCop 检查是被动的(由开发人员调用或在构建环境中调用)。我还想在签入时提醒您,您的代码可以改进。

我创建了一个项目,它将TortoiseSVN Hook 机制与运行控制台 StyleCop 实例相结合。

做起来相当简单。GitHub 上提供的项目文件

于 2014-03-24T14:21:14.127 回答