MSBuild获取测试的程序集名称

MSBuild获取测试的程序集名称,msbuild,opencover,msbuild-propertygroup,msbuild-itemgroup,Msbuild,Opencover,Msbuild Propertygroup,Msbuild Itemgroup,我正在努力扩大覆盖面。如果OpenCover过滤器只是+[*],其中一个测试需要很长时间,因此我决定添加程序集名称。但这不是一种有效的方法,因为程序集可能会增加。我想做一些事情,比如从UnitTestAssembly中提取程序集名称,并将其作为带方括号和all的参数传递给过滤器 UnitTestAssembly.Filename提供Assembly1.Tests,我希望将Assembly1添加为筛选器 <ItemGroup> <UnitTestAssemblies Inc

我正在努力扩大覆盖面。如果OpenCover过滤器只是+[*],其中一个测试需要很长时间,因此我决定添加程序集名称。但这不是一种有效的方法,因为程序集可能会增加。我想做一些事情,比如从UnitTestAssembly中提取程序集名称,并将其作为带方括号和all的参数传递给过滤器

UnitTestAssembly.Filename提供Assembly1.Tests,我希望将Assembly1添加为筛选器

<ItemGroup>
   <UnitTestAssemblies Include="$(ProjectRoot)\**\bin\$(Configuration)\*.Tests.dll" />
</ItemGroup>


<Exec Command="$(OpenCoverToolPath)\OpenCover.Console.exe 
                -target:$(NUnitToolPath)\nunit3-console.exe 
                -register
                -targetargs:%(UnitTestAssemblies.FullPath) 
                -filter:&quot;+[Assembly1]* +[Assembly2]*&quot;
                -output:$(somepath)\%(UnitTestAssemblies.Filename).coverage.xml" 
              ContinueOnError="true" Timeout="1800000"/>

我不确定这种方法是否有效,但这对我有效

<ItemGroup>
   <UnitTestAssemblies>
      <AssemblyName>+[$([System.String]::Copy('%(Filename)').Replace('.Tests', ''))]*</AssemblyName>
   <UnitTestAssemblies>
</ItemGroup>

<PropertyGroup>
   <AssemblyFilters>@(UnitTestAssemblies->'%(AssemblyName)'->Distinct(), ' ')</AssemblyFilters>
<PropertyGroup>


+[$([System.String]::复制('%(文件名)')。替换('.Tests','')]*
@(UnitTestAssemblys->'%(AssemblyName)->Distinct(),“”)
然后我将
$(AssemblyFilters)
作为参数传递。
-filters:“$(AssemblyFilters)”