1 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3 <UsingTask TaskName="RemoveDuplicateAssemblies" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
5 <DuplicateAssemblies ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
6 <AssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
7 <UniqueAssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
10 <Using Namespace="System"/>
11 <Using Namespace="System.IO"/>
12 <Using Namespace="System.Collections.Generic"/>
13 <Code Type="Fragment" Language="cs">
15 var uniqueAssemblyPathsList = new List<Microsoft.Build.Framework.ITaskItem>();
16 var dupeSet = new HashSet<string>();
17 foreach(var dupe in DuplicateAssemblies)
19 dupeSet.Add(dupe.GetMetadata("Identity"));
21 foreach(var assemPath in AssemblyPaths)
23 if((dupeSet.Contains(assemPath.GetMetadata("FileName")+assemPath.GetMetadata("Extension")) &&
24 !(assemPath.GetMetadata("Identity").StartsWith("runtime"))))
26 Log.LogMessage("Duplicate assembly filtered: {0}", assemPath.GetMetadata("Identity"));
30 uniqueAssemblyPathsList.Add(assemPath);
34 UniqueAssemblyPaths = uniqueAssemblyPathsList.ToArray();
41 <UsingTask TaskName="GetPerfTestAssemblies" AssemblyFile="$(ToolsDir)net45/Microsoft.DotNet.Build.CloudTestTasks.dll"/>
42 <Import Project="$(ToolsDir)publishtest.targets" />
43 <Import Project="$(ToolsDir)CloudTest.targets" />
44 <Target Name="UploadPerfAssemblies">
45 <Message Text="Searching for Perf tests in $(BinDir)" Importance = "High"/>
47 <TestBinary Include="$(BinDir)**/*.dll" />
48 <TestBinary Include="$(BinDir)**/*.exe" />
50 <!-- Get full paths to each of the perf test directories -->
51 <GetPerfTestAssemblies TestBinaries="@(TestBinary)" GetFullPaths="true">
52 <Output TaskParameter="PerfTestAssemblies" ItemName="CoreCLRPerfTest" />
53 </GetPerfTestAssemblies>
56 <DnuSourceList Include="$(CORE_ROOT)\.nuget\pkg" />
59 <!-- Restore the runtime dependencies -->
60 <Exec Command="$(DnuRestoreCommand) "$(TestRuntimeProjectJson)""
61 StandardOutputImportance="Low"
62 CustomErrorRegularExpression="^Unable to resolve .*"
64 IgnoreStandardErrorWarningFormat="true" />
66 <!-- For each perf test, generate assembly list, and zip up the workitem -->
67 <MSBuild Projects="$(MSBuildProjectFile)" Properties="CurrPerfAssembly=%(CoreCLRPerfTest.Identity);TestRuntimeProjectLockJson=$(TestRuntimeProjectLockJson)" Targets="_zipSingleProject"/>
69 <!-- After all workitems are packaged, call the CloudBuild Targets from Build Tools which upload these workitems and trigger a test run for these workitems -->
70 <MSBuild Projects="$(MSBuildProjectFile)" Properties="BinDir=$(BinDir)../" Targets="CloudBuild" />
74 <Target Name="RunTestsForProject">
75 <Message Text="This is a dummy target to appease DependsOnTargets for ArchiveTestBuild in publishtest.targets" Importance="Low" />
78 <!-- CoreCLR builds do not generate dependency lists yet, we need to archive the whole packages dir so that tests can find dependencies -->
79 <!-- compress the required files from the packages dir in preparation for uploading -->
80 <Target Name="CompressPackagesDir">
82 <ExcludeFromArchive Include="nupkg$" />
83 <ExcludeFromArchive Include="Microsoft.DotNet.BuildTools" />
84 <ExcludeFromArchive Include="TestData" />
86 <ZipFileCreateFromDirectory
87 SourceDirectory="$(PackagesDir)"
88 DestinationArchive="$(PackagesArchiveFile)"
89 ExcludePatterns="@(ExcludeFromArchive)"
90 OverwriteDestination="true" />
92 <ForUpload Include="$(PackagesArchiveFile)">
93 <RelativeBlobPath>$(Platform)$(ConfigurationGroup)/$(PackagesArchiveFilename)</RelativeBlobPath>
98 <Target Name="_zipSingleProject">
100 <OutDir>$([System.IO.Path]::GetDirectoryName($(CurrPerfAssembly)))/</OutDir>
101 <TestArchiveDir>$(BaseOutputPath)\testStagingDir\</TestArchiveDir>
102 <TestProjectName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrPerfAssembly)))</TestProjectName>
103 <ProjectLockJson>$(OutDir)project.lock.json</ProjectLockJson>
107 <TestNugetProjectLockFile Include="$(ProjectLockJson)" Condition="Exists($(ProjectLockJson))"/>
108 <TestNugetProjectLockFile Include="$(TestRuntimeProjectLockJson)" Condition="Exists($(TestRuntimeProjectLockJson))"/>
111 <!-- Generate Assembly list based on the individual project's project.json as well as the common runtime dependencies generated by AddAssFilesToAssemblyList target -->
112 <PrereleaseResolveNuGetPackageAssets
113 AllowFallbackOnTargetSelection="true"
114 IncludeFrameworkReferences="false"
115 NuGetPackagesDirectory="$(PackagesDir)"
116 RuntimeIdentifier="$(TestNugetRuntimeId)"
118 ProjectLockFile="%(TestNugetProjectLockFile.FullPath)"
119 TargetMonikers="@(TestTargetFramework)">
120 <Output TaskParameter="ResolvedCopyLocalItems" ItemName="RequiredAssemblies" />
121 </PrereleaseResolveNuGetPackageAssets>
125 <AssemblyPaths Include="$([MSBuild]::MakeRelative($(PackagesDir), %(RequiredAssemblies.FullPath)))" />
126 <AssemblyFiles Include="@(RequiredAssemblies->'%(FileName)%(Extension)')"></AssemblyFiles>
127 <DupeAssemblies Include="%(AssemblyFiles.Identity)" Condition="'@(AssemblyFiles->Count())' > 1"> </DupeAssemblies>
129 <!-- There are duplicate dependency assemblies calculated for some projects that we need to fix, this is check/fix to weed out duplicates -->
130 <RemoveDuplicateAssemblies AssemblyPaths="@(AssemblyPaths)" DuplicateAssemblies="@(DupeAssemblies)">
131 <Output TaskParameter="UniqueAssemblyPaths" ItemName="UniqueAssemblyPaths" />
132 </RemoveDuplicateAssemblies>
135 File="$(OutDir)/assemblylist.flat.txt"
136 Lines="@(UniqueAssemblyPaths)"
140 <GenerateAssemblyList
141 InputListLocation="$(OutDir)assemblylist.flat.txt"
142 OutputListLocation="$(OutDir)assemblylist.txt"
145 <Message Text="Archiving Perf test assemblies for project: $(OutDir)" Importance="High" />
146 <MSBuild Projects="$(MSBuildProjectFile)" Properties="OutDir=$(OutDir);TestArchiveDir=$(TestArchiveDir);TestProjectName=$(TestProjectName)" Targets="ArchiveTestBuild"/>