如何强制从代码覆盖范围中排除某些程序集?

时间:2015-05-15 22:10:56

标签: visual-studio code-coverage tfsbuild runsettings

我试图通过使用runsettings文件来限制在TFS中的代码覆盖率过程中分析的程序集,但是即使我明确地将它们排除在外,一些程序集也坚持要进行分析。

这是我当前的runsettings文件内容:

<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <!-- Configurations for data collectors -->
  <DataCollectionRunSettings>
    <DataCollectors>
      <DataCollector friendlyName="Code Coverage" 
                     uri="datacollector://Microsoft/CodeCoverage/2.0" 
                     assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
        <Configuration>
          <CodeCoverage>
            <ModulePaths>
              <Include>
                <ModulePath>.*Cloud4Mobile.*</ModulePath>
              </Include>
              <Exclude>
                <ModulePath>.*Tests.dll$</ModulePath>
                <ModulePath>.*TestUtilities.dll$</ModulePath>
              </Exclude>
            </ModulePaths>
            <CompanyNames>
              <Include>.*Mobiltec.*</Include>
            </CompanyNames>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

但是,当我从Visual Studio运行代码覆盖率来测试此文件时,分析仍然显示其他与我的过滤器不匹配的程序集,如AutoMapper和CacheManager:

enter image description here

请注意,我的设置默认情况下已经排除了这些程序集,但即使这样,我也尝试明确地将它们排除在无效之外,如下所示:

<Exclude>
  <ModulePath>^AutoMapper.dll$</ModulePath>
  ...
</Exclude>

我尝试了正则表达式的所有变体,从限制较少(使用。*)到限制性最强(如该示例)。这些程序集污染了我在TFS构建摘要中获得的报告,并且我想将它们从分析中删除。这是我从TFS获得的完整输出,这显然是无用的:

enter image description here

我设法使用此.runsettings配置文件删除了大部分内容,但是如何确保这些异常值也没有在那里显示?为什么他们甚至在第一时间显示,考虑到它们根本不与我的包含过滤器相匹配?

2 个答案:

答案 0 :(得分:2)

我的猜测是.中的Automapper.dll导致问题。你能尝试使用

吗?
<Exclude>
  <ModulePath>.*AutoMapper\.dll$</ModulePath>

对于默认排除所有内容的情况,您应该在模块路径排除项中使用.*\.dll

答案 1 :(得分:0)

这看起来很明显,但您是否更新了构建定义以包含.runsettings文件?在您的构建中启用CodeCoverage是一回事,但您必须提供.runsettings文件的路径。