我正在尝试修改stylecop目标,以支持仅对已更改的文件进行增量检查。
调试时,我看到@(编译)是要检查的文件列表;但是,我想将此列表过滤为仅已更改的文件(即那些时间戳晚于目标dll的文件,我知道我可以引用为$(TargetPath))。
如何递归该createitem的输出,“StyleCopFiles”并删除那些未更改的文件?
下面是目标,我想将过滤条件添加到:
<Target Name="SetUpStyleCopProperties">
<!-- Determine what files should be checked. Take all Compile items, but exclude those that have
set ExcludeFromStyleCop=true or ExcludeFromSourceAnalysis=true. -->
<CreateItem Include="@(Compile)" Condition="('%(Compile.ExcludeFromStyleCop)' != 'true') and ('%(Compile.ExcludeFromSourceAnalysis)' != 'true')">
<Output TaskParameter="Include" ItemName="StyleCopFiles"/>
</CreateItem>
<!-- Show list of what files should be excluded. checked. Take all Compile items, but exclude those that have
set ExcludeFromStyleCop=true or ExcludeFromSourceAnalysis=true. -->
<CreateItem Include="@(Compile)" Condition="('%(Compile.ExcludeFromStyleCop)' == 'true') or ('%(Compile.ExcludeFromSourceAnalysis)' == 'true')">
<Output TaskParameter="Include" ItemName="StyleCopExcludedFiles"/>
</CreateItem>
</Target>
答案 0 :(得分:0)
使用自定义MSBuild任务可以提出建议。但是,增量的StyleCop分析可能无法正常工作,因为失败的StyleCop分析不一定会阻止编译。想象一下您提出的增量分析中的以下事件序列:
在#2,你会看到一个关于A.cs中问题的StyleCop警告。但是,在#4,你只会看到B.cs中的问题,而不是A.cs中的问题。这真的是你想要的吗?
如果您确实发现StyleCop在开发人员本地构建期间导致有问题的延迟,则还有另一种选择:创建省略StyleCop的备用构建配置。例如,我经常创建一个“DebugCompileOnly”解决方案配置,它省略了StyleCop和FxCop分析。开发人员可以在他们的本地机器上随意使用它,但是它们应该在提交之前在Debug配置(包括两个工具)下编译。构建服务器上的持续集成构建使用Debug配置,从而确保很快发现任何失败的情况。