Baseclass.Contrib.Nuget.Output.targets 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  3. <!-- ============================================================ -->
  4. <!-- Build targets -->
  5. <!-- ============================================================ -->
  6. <!--
  7. Is run once after build, checks if the project's nuget package's .nuspec depends on Baseclass.Contrib.Nuget.Output and copies everything which is in the
  8. output folder to the builds OutDir.
  9. -->
  10. <Target Name="CopyToOutput" AfterTargets="Compile" DependsOnTargets="CollectNugetOutputFiles">
  11. <Copy SourceFiles="@(NugetOutputFiles)" DestinationFiles="@(NugetOutputFiles->'$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
  12. </Target>
  13. <!--
  14. Is run once after clean, delete all files that match files collected by the CollectNugetOutputFiles task.
  15. -->
  16. <Target Name="CleanOutput" AfterTargets="Clean" DependsOnTargets="CollectNugetOutputFiles">
  17. <Delete Files="@(NugetOutputFiles->'$(OutDir)\%(RecursiveDir)%(Filename)%(Extension)')" />
  18. </Target>
  19. <!--
  20. Is run once per file which has been deleted by the CleanOutput target, if the containing folder is empty it gets deleted.
  21. -->
  22. <Target Name="CleanEmptyFolder" Inputs="@(NugetOutputFiles)" Outputs="%(Identity).Dummy" AfterTargets="CleanOutput">
  23. <ItemGroup>
  24. <EmptyCheck Include="$(OutDir)%(NugetOutputFiles.RecursiveDir)**\*.*" />
  25. </ItemGroup>
  26. <RemoveDir Condition="'@(EmptyCheck)' == '' And '%(NugetOutputFiles.RecursiveDir)' != ''" Directories="$(OutDir)%(NugetOutputFiles.RecursiveDir)" />
  27. </Target>
  28. <!-- ============================================================ -->
  29. <!-- Web publication targets -->
  30. <!-- ============================================================ -->
  31. <PropertyGroup>
  32. <PipelineCollectFilesPhaseDependsOn>
  33. $(PipelineCollectFilesPhaseDependsOn);
  34. CollectNugetPackageFiles;
  35. </PipelineCollectFilesPhaseDependsOn>
  36. </PropertyGroup>
  37. <!--
  38. Is run once during the PipelineCollectFilesPhase to fill FilesForPackagingFromProject with the files from NugetOutputFiles
  39. -->
  40. <Target Name="CollectNugetPackageFiles" DependsOnTargets="CollectNugetOutputFiles">
  41. <ItemGroup>
  42. <FilesForPackagingFromProject Include="@(NugetOutputFiles)" >
  43. <DestinationRelativePath>bin\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
  44. </FilesForPackagingFromProject>
  45. </ItemGroup>
  46. </Target>
  47. <!-- ============================================================ -->
  48. <!-- Common targets -->
  49. <!-- ============================================================ -->
  50. <!--
  51. Is run once to compute the NugetOutputFiles item from the NuGet dependencies of the project
  52. -->
  53. <Target Name="CollectNugetOutputFiles">
  54. <Message Text="Collecting NuGet output files for $(MSBuildProjectName):" />
  55. <PackageRetrievalTask ProjectName="$(MSBuildProjectName)" ProjectDirectory="$(MSBuildProjectDirectory)" ProjectFullPath="$(MSBuildProjectFullPath)" SolutionPath="$(SolutionDir)">
  56. <Output ItemName="FilteredNugetPackages" TaskParameter="Result" />
  57. </PackageRetrievalTask>
  58. <Message Text="@(FilteredNugetPackages->'%(RecursiveDir)%(Filename)%(Extension)', '%0D%0A')" />
  59. <Message Text="Total filtered packages : @(FilteredNugetPackages->Count())" />
  60. <ItemGroup>
  61. <NugetOutputFiles Include="%(FilteredNugetPackages.RootDir)%(FilteredNugetPackages.Directory)\output\**\*.*" />
  62. </ItemGroup>
  63. <Message Text="@(NugetOutputFiles->'%(RecursiveDir)%(Filename)%(Extension)', '%0D%0A')" />
  64. <Message Text="Total files collected : @(NugetOutputFiles->Count())" />
  65. </Target>
  66. <!--
  67. Filter the NugetPackages list to only include nuget packages referenced in the PackageConfigs list which depend on Baseclass.Contrib.Nuget.Output
  68. -->
  69. <UsingTask TaskName="PackageRetrievalTask" AssemblyFile="$(MSBuildThisFileDirectory)\Baseclass.Contrib.Nuget.Output.Build.dll" />
  70. </Project>