0

我正在尝试修改 stylecop 目标以支持仅对已更改的文件进行增量检查。

调试时,我看到@(Compile) 是要检查的文件列表;但是,我想将此列表过滤为仅已更改的文件(即那些时间戳晚于目标 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>
4

1 回答 1

0

使用自定义 MSBuild 任务可以实现您的提议。但是,增量 StyleCop 分析可能不会像您预期的那样工作,因为失败的 StyleCop 分析不一定会阻止编译。想象一下您建议的增量分析下的以下事件序列:

  1. 文件 A.cs 已修改,包括引入会导致 StyleCop 警告的问题。
  2. 该项目已建成。
  3. 文件 B.cs 已修改,包括引入会导致 StyleCop 警告的问题。(文件 A.cs 未修改。)
  4. 该项目已建成。

在 #2 处,您会在 A.cs 中看到针对该问题的 StyleCop 警告。但是,在 #4 中,您只会看到 B.cs 中的问题,而不是 A.cs 中的问题。这真的是你想要的吗?

如果您确实发现 StyleCop 在开发人员本地构建期间导致延迟问题,还有另一种选择:创建一个省略 StyleCop 的替代构建配置。例如,我经常创建一个“DebugCompileOnly”解决方案配置,它忽略了 StyleCop 和 FxCop 分析。开发人员可以在他们的本地机器上随意使用它,但他们应该在提交之前在 Debug 配置(包括这两个工具)下编译。构建服务器上的持续集成构建使用 Debug 配置,从而确保非常快速地识别出任何失败。

于 2013-09-12T14:34:56.233 回答