【发布时间】:2020-04-08 16:28:46
【问题描述】:
我是 Fxcop Analyzer 样式检查员。
我想从预提交运行/调用 Fxcop,所以如果 Fxcop 发现任何错误或字段,那么 Git Hook 预提交应该停止提交过程。
我从来没有在 Bash 中编程过,这是我第一次使用 git hook。
任何我可以用来设置的建议都会很棒。
【问题讨论】:
标签: c# git githooks fxcop pre-commit-hook
我是 Fxcop Analyzer 样式检查员。
我想从预提交运行/调用 Fxcop,所以如果 Fxcop 发现任何错误或字段,那么 Git Hook 预提交应该停止提交过程。
我从来没有在 Bash 中编程过,这是我第一次使用 git hook。
任何我可以用来设置的建议都会很棒。
【问题讨论】:
标签: c# git githooks fxcop pre-commit-hook
要将 FxCop 作为pre-commit 挂钩运行,您需要安装FxCop as nuget package,然后像从命令行一样使用MSBuild 构建项目。当MSBuild 检测到任何错误时,它将以非零退出代码退出。当git 检测到pre-commit 钩子以非零退出代码退出时,它将阻止提交通过。
根据Microsoft's documentation,这是您可以使用的命令行:
msbuild myproject.csproj /target:rebuild /verbosity:minimal
即使在 Windows 上,Git 也使用 bash 来执行挂钩文件,因此命令行语法与常规的 cmd 略有不同。您可以尝试以下作为pre-commit 挂钩文件:
#!/bin/sh
'/c/Program Files (x86)/Microsoft Visual Studio/2019/Professional/MSBuild/Current/Bin/MSBuild.exe' ConsoleApp1.csproj /target:rebuild /verbosity:minimal
假设 ConsoleApp1.csproj 位于您本地 git 存储库文件夹的根目录,并且我使用的是 Visual Studio 2019 (16.4.5),因此您可能需要根据您的环境对其进行调整。
它应该适用于 .Net 或 .Net Core 项目。
请注意,如果只有警告,那么MSBuild 将不会以非零退出代码退出。如果您希望某些规则因错误而失败,您可以配置FxCop severity,或者使用MSBuild 和warnAsError 开关。
此外,根据构建需要多长时间,您可能需要考虑使用拉取请求构建管道,而不是 pre-commit 挂钩。
【讨论】: