C# 如何将类型和方法排除在TeamCity的dotCover之外?

C# 如何将类型和方法排除在TeamCity的dotCover之外?,c#,teamcity,code-coverage,dotcover,C#,Teamcity,Code Coverage,Dotcover,我有一个现有的C#4项目,我使用TestDriven.Net和Visual Studio覆盖特性检查了该项目的测试覆盖率,即使用上下文菜单中的->覆盖率进行测试 该项目包含一些我不想包含的代码,我通过为这些类型和方法添加[ExcludeFromCodeCoverage]解决了这个问题 我们刚刚将TeamCity升级到6.0.3,我还将dotCover覆盖范围添加到NUnit构建步骤中 我在“过滤器”部分中成功地删除了外部程序集(如NHibernate)的覆盖范围(通过显式地说明我想要覆盖的程序集

我有一个现有的C#4项目,我使用TestDriven.Net和Visual Studio覆盖特性检查了该项目的测试覆盖率,即使用上下文菜单中的->覆盖率进行测试

该项目包含一些我不想包含的代码,我通过为这些类型和方法添加
[ExcludeFromCodeCoverage]
解决了这个问题

我们刚刚将TeamCity升级到6.0.3,我还将dotCover覆盖范围添加到NUnit构建步骤中

我在“过滤器”部分中成功地删除了外部程序集(如NHibernate)的覆盖范围(通过显式地说明我想要覆盖的程序集),但我正在努力从覆盖的程序集中排除类型和方法

看看这页。看起来您可以在“过滤器”部分中设置排除,类似于排除整个程序集的方式

假设您希望忽略类
MyStuff
中包含的名为
DoStuff
的方法,该类位于
MyAwesomeAssembly
库中。那么您的dotCover XML应该如下所示:

<Filters>
  <ExcludeFilters>
     <FilterEntry>
       <ModuleMask>MyAwesomeAssembly</ModuleMask>
       <ClassMask>MyStuff</ClassMask>
       <FunctionMask>DoStuff</FunctionMask>
     </FilterEntry>
  </ExcludeFilters>
</Filters>

MyAwesomeAssembly
糠秕
多斯塔夫

免责声明:我不使用dotCover,因此我不能100%确定这是否真的有效。

这是TeamCity文档关于过滤器选项的说明:

使用以下语法指定要为每行分析一个的程序集:+:myassembly=;类型=;方法=*

使用 -:myassembly
将程序集从代码覆盖范围中排除。此处支持星号通配符(*)

好吧,马丁,我想出来了!它只花了一个小时的随机拨弄过滤器语法。。。当文档中说要添加这样的过滤器时

+:myassembly=*;type=*;method=***
他们真的是这个意思。。。其中,
中的任何内容都被您完全替换,其他任何内容都是文字

+:<myassembly>;type=<filter>;method=<filter>

亚当,谢谢你的意见。如问题中所述,我想在TeamCity中使用构建步骤的“过滤器”部分。如果XML配置是最后一个选项(以及如何将dotCover XML配置文件与TeamCity一起使用?),我只会使用它。@Martin啊,对不起,我误解了你的意思。看起来stealf在他们的回答中涵盖了你需要的东西。希望有帮助。:)ModuleMask、ClassMask和FunctionMask应该是属性,而不是元素。此外,必须在每个掩码中指定完整的命名空间限定名。我还发现,通过使用菜单dotCover->Edit Coverage Filters,您可以轻松地从VS修改文件。。。命令。有关使用dotCover筛选器的详细信息,请参阅。值得一提的是,使用此选项意味着您可以在本地运行dotCover时体验相同的结果,并在源代码管理中进行筛选,而不是在CI工具中定义,但这取决于您的偏好。我已经阅读了文档,但无法使其正常工作。一个可工作的示例会很好。在浏览了dotCover源代码(当然是使用dotPeek)之后,我已经设法解决了如何在命令行上指定多个过滤器的问题。您可以使用
分隔过滤器和筛选器可以是程序集筛选器、类型筛选器或方法筛选器。因此,要在AssemblyA.Blah命名空间中包括AssemblyA但排除类型:
+:AssemblyA;-:type=AssemblyA.Blah.*
@bruceboughton您是如何让dotPeek查看dotCover的源代码的?我一直渴望编写一个F#工具,它使用命令行参数程序集过滤器来控制当前目录,并显示排除/包含的程序集列表,这将使我的梦想成真!
+:Omnyx.Scanner
-:Omnyx.Scanner;type=Omnyx.Scanner.Simulation.*
-:Omnyx.Scanner;type=Omnyx.Scanner.ToolsCommon.*