msbuild输出删除程序集

时间:2012-05-17 23:08:36

标签: msbuild msbuild-task itemgroup

我有一些看起来像这样的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>

因此,我正在构建所有单元测试项目,并使用TargetOutputs参数上的Output任务捕获已构建的dll。问题是其中一个项目正在调用一个输出一些dll的任务,我不想实际运行xunit。

奇怪的是,Remove="*.Example.dll"似乎根本没有任何影响,xunit正试图测试装配。

为什么Remove无效?

1 个答案:

答案 0 :(得分:0)

其实我觉得我弄明白了。似乎问题在于Target中的ItemGroups与Target外部的相对路径的解析方式。我需要对我的路径更加明确,然后它才有效。基本上我这样做是为了让它起作用:

<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>