When using CustomizableOutDir, I'm having problems with TFS Team Build firing off MSTest.exe properly.
TFSBuild.rsp
/verbosity:diagnostic
/p:CustomizableOutDir=true
TFSBuild.proj (solutions to build snippet)
<!-- code -->
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../foo.csproj">
<Properties>OutputPath=$(BinariesRoot)\WindowsServices\foo\</Properties>
</SolutionToBuild>
<!-- tests -->
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../test/test.sln">
<Targets>t1;t2</Targets>
<Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>
</SolutionToBuild>
With both <Properties>OutputPath=$(BinariesRoot)\TestHarness\</Properties>
and <Properties></Properties>
, I get the following error at the end of the build:
"C:\build\BuildType\TFSBuild.proj" (TestConfiguration target) (1:12) -> (CoreTestConfiguration target) ->
MSBUILD : warning MSB6003: The specified task executable "MSTest.exe" could not be run. The directory name is invalid
After finding this article, I and then added the following:
<Target Name="AfterCompile">
<ItemGroup>
<SolutionOutputs Condition="'%(CompilationOutputs.Solution)' == '$(Solution)'" Include="%(RootDir)%(Directory)**\*.*" />
<ServiceOutputs Include="$(BinariesRoot)\WindowsServices\**\*.*" />
<TestHarnessOutputs Include="$(BinariesRoot)\TestHarness\*.*" />
</ItemGroup>
<Copy SourceFiles="@(SolutionOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
<Copy SourceFiles="@(ServiceOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
<Copy SourceFiles="@(TestHarnessOutputs)" DestinationFolder="$(TeamBuildOutDir)" />
</Target>
Which gave this:
(AfterCompile target) ->
C:\build\BuildType\TFSBuild.proj(289,5): error MSB3023: No destination specified for Copy. Please supply either "DestinationFiles" or "DestinationDirectory".
DestinationDirectory is not part of the schema http://schemas.microsoft.com/developer/msbuild/2003
, but I figured I would try it anyway. So I changed all the DestinationFolder
on the copy tasks to DestinationDirectory
and as expected I got this:
(AfterCompile target) ->
C:\build\BuildType\TFSBuild.proj(288,44): error MSB4064: The "DestinationDirectory" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a settable public instance property.
C:\build\BuildType\TFSBuild.proj(288,5): error MSB4063: The "Copy" task could not be initialized with its input parameters.
Anybody out there have CustomizableOutDir and MSTest working together in harmony with their TFS Team Build?
EDIT:
I found this discussion and applied this change:
<Target Name="BeforeTest">
<!-- The tests won't run if the binaries directory does not exist -->
<MakeDir
Directories="$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)"
Condition="!Exists('$(BinariesRoot)\%(ConfigurationToBuild.FlavorToBuild)')" />
</Target>
Which resulted in this:
"C:\build\BuildType\TFSBuild.proj" (RunTest target) (1:11) -> "C:\build\BuildType\TFSBuild.proj" (TestConfiguration target) (1:12) -> (CoreTestConfiguration target) ->
MSBUILD : warning MSB6006: "MSTest.exe" exited with code 1.