msbuild output remove assemblies

684 views Asked by At

I have some msbuild code that looks something like this:

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

So I am building all of my unit test projects and caputuring the built dll's using the Output task on the TargetOutputs parameter. The problem is that one of the projects is calling a task that outputs some dll's that I don't want to actually run xunit against.

What's weird though is that the Remove="*.Example.dll" appears to not have any affect at all and xunit is trying to test the assembly anyway.

Why is Remove not working?

1

There are 1 answers

0
justin.m.chase On

Actually I think I figured it out. It appears that the problem resides in the way the relative path is resolved in ItemGroups in the Target vs. outside of a Target. I need to be a little more explicit with my path and then it works. Basically I did this to get it to work:

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