2012-05-17 25 views
0

我有一些MSBuild的代码看起来是这样的:MSBuild的输出中删除组件

<Target Name="Build"> 
    <MSBuild 
     Projects="@(UnitTestProject)" 
     Properties="$(BuildProperties)"> 
     <Output TaskParameter="TargetOutputs" ItemName="TestAssembly" /> 
    </MSBuild> 
</Target> 
<Target Name="Test" DependsOnTargets="Build"> 
    <ItemGroup> 
     <TestAssembly Remove="*.Example.dll" /> 
    </ItemGroup> 
    <xunit Assemblies="@(TestAssembly)" /> 
</Target> 

所以我建立我所有的单元测试项目,并内置dll的使用上TargetOutputs参数输出任务caputuring。问题是其中一个项目正在调用一个输出某些dll的任务,我不想实际运行xunit。

虽然有什么不可思议的是Remove="*.Example.dll"似乎没有任何影响,并且xunit试图测试程序集。

为什么Remove无法正常工作?

回答

0

其实我想我想通了。看起来问题在于相对路径在目标中的ItemGroups中与目标外部的解析方式。我需要更加明确我的路径,然后才能正常工作。基本上我是这样做的:

<Target Name="Build"> 
    <MSBuild 
     Projects="@(UnitTestProject)" 
     Properties="$(BuildProperties)"> 
     <Output TaskParameter="TargetOutputs" ItemName="UnitTestOutput" /> 
    </MSBuild> 
    <ItemGroup> 
     <TestAssembly Include="@(UnitTestOutput)" Exclude="$(RootTestPath)\**\*.Example.dll" /> 
</Target> 
<Target Name="Test" DependsOnTargets="Build"> 
    <xunit Assemblies="@(TestAssembly)" /> 
</Target>