1 <?xml version="1.0" encoding="utf-8"?>
2 <Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
4 <UsingTask TaskName="RemoveDuplicateAssemblies" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
6 <DuplicateAssemblies ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
7 <AssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
8 <UniqueAssemblyPaths ParameterType="Microsoft.Build.Framework.ITaskItem[]" Output="true" />
11 <Using Namespace="System"/>
12 <Using Namespace="System.IO"/>
13 <Using Namespace="System.Collections.Generic"/>
14 <Code Type="Fragment" Language="cs">
16 var uniqueAssemblyPathsList = new List<Microsoft.Build.Framework.ITaskItem>();
17 var dupeSet = new HashSet<string>();
18 foreach(var dupe in DuplicateAssemblies)
20 dupeSet.Add(dupe.GetMetadata("Identity"));
22 foreach(var assemPath in AssemblyPaths)
24 if((dupeSet.Contains(assemPath.GetMetadata("FileName")+assemPath.GetMetadata("Extension")) &&
25 !(assemPath.GetMetadata("Identity").StartsWith("runtime"))))
27 Log.LogMessage("Duplicate assembly filtered: {0}", assemPath.GetMetadata("Identity"));
31 uniqueAssemblyPathsList.Add(assemPath);
35 UniqueAssemblyPaths = uniqueAssemblyPathsList.ToArray();
42 <UsingTask TaskName="GetPerfTestAssemblies" AssemblyFile="$(ToolsDir)net45/Microsoft.DotNet.Build.CloudTestTasks.dll"/>
43 <Import Project="$(ToolsDir)publishtest.targets" />
44 <Import Project="$(ToolsDir)CloudTest.targets" />
45 <Target Name="UploadPerfAssemblies">
46 <Message Text="Searching for Perf tests in $(BinDir)" Importance = "High"/>
48 <TestBinary Include="$(BinDir)**/*.dll" />
49 <TestBinary Include="$(BinDir)**/*.exe" />
51 <!-- Get full paths to each of the perf test directories -->
52 <GetPerfTestAssemblies TestBinaries="@(TestBinary)" GetFullPaths="true">
53 <Output TaskParameter="PerfTestAssemblies" ItemName="CoreCLRPerfTest" />
54 </GetPerfTestAssemblies>
56 <!-- Restore the runtime dependencies -->
57 <Exec Command="$(DotnetRestoreCommand) "$(TestRuntimeProjectJson)""
58 StandardOutputImportance="Low"
59 CustomErrorRegularExpression="^Unable to resolve .*"
61 IgnoreStandardErrorWarningFormat="true" />
63 <!-- For each perf test, generate assembly list, and zip up the workitem -->
64 <MSBuild Projects="$(MSBuildProjectFile)" Properties="CurrPerfAssembly=%(CoreCLRPerfTest.Identity);TestRuntimeProjectLockJson=$(TestRuntimeProjectLockJson)" Targets="_zipSingleProject"/>
66 <!-- After all workitems are packaged, call the CloudBuild Targets from Build Tools which upload these workitems and trigger a test run for these workitems -->
67 <MSBuild Projects="$(MSBuildProjectFile)" Properties="BinDir=$(BinDir)../" Targets="CloudBuild" />
71 <Target Name="RunTestsForProject">
72 <Message Text="This is a dummy target to appease DependsOnTargets for ArchiveTestBuild in publishtest.targets" Importance="Low" />
75 <!-- CoreCLR builds do not generate dependency lists yet, we need to archive the whole packages dir so that tests can find dependencies -->
76 <!-- compress the required files from the packages dir in preparation for uploading -->
77 <Target Name="CompressPackagesDir">
79 <ExcludeFromArchive Include="nupkg$" />
80 <ExcludeFromArchive Include="Microsoft.DotNet.BuildTools" />
81 <ExcludeFromArchive Include="TestData" />
83 <ZipFileCreateFromDirectory
84 SourceDirectory="$(PackagesDir)"
85 DestinationArchive="$(PackagesArchiveFile)"
86 ExcludePatterns="@(ExcludeFromArchive)"
87 OverwriteDestination="true" />
89 <ForUpload Include="$(PackagesArchiveFile)">
90 <RelativeBlobPath>$(Platform)$(ConfigurationGroup)/$(PackagesArchiveFilename)</RelativeBlobPath>
95 <Target Name="_zipSingleProject">
97 <OutDir>$([System.IO.Path]::GetDirectoryName($(CurrPerfAssembly)))/</OutDir>
98 <TestArchiveDir>$(BaseOutputPath)\testStagingDir\</TestArchiveDir>
99 <TestProjectName>$([System.IO.Path]::GetFileNameWithoutExtension($(CurrPerfAssembly)))</TestProjectName>
100 <ProjectLockJson>$(OutDir)project.lock.json</ProjectLockJson>
104 <TestNugetProjectLockFile Include="$(ProjectLockJson)" Condition="Exists($(ProjectLockJson))"/>
105 <TestNugetProjectLockFile Include="$(TestRuntimeProjectLockJson)" Condition="Exists($(TestRuntimeProjectLockJson))"/>
108 <!-- Generate Assembly list based on the individual project's project.json as well as the common runtime dependencies generated by AddAssFilesToAssemblyList target -->
109 <PrereleaseResolveNuGetPackageAssets
110 AllowFallbackOnTargetSelection="true"
111 IncludeFrameworkReferences="false"
112 NuGetPackagesDirectory="$(PackagesDir)"
113 RuntimeIdentifier="$(TestNugetRuntimeId)"
115 ProjectLockFile="%(TestNugetProjectLockFile.FullPath)"
116 TargetMonikers="@(TestTargetFramework)">
117 <Output TaskParameter="ResolvedCopyLocalItems" ItemName="RequiredAssemblies" />
118 </PrereleaseResolveNuGetPackageAssets>
122 <AssemblyPaths Include="$([MSBuild]::MakeRelative($(PackagesDir), %(RequiredAssemblies.FullPath)))" />
123 <AssemblyFiles Include="@(RequiredAssemblies->'%(FileName)%(Extension)')"></AssemblyFiles>
124 <DupeAssemblies Include="%(AssemblyFiles.Identity)" Condition="'@(AssemblyFiles->Count())' > 1"> </DupeAssemblies>
126 <!-- There are duplicate dependency assemblies calculated for some projects that we need to fix, this is check/fix to weed out duplicates -->
127 <RemoveDuplicateAssemblies AssemblyPaths="@(AssemblyPaths)" DuplicateAssemblies="@(DupeAssemblies)">
128 <Output TaskParameter="UniqueAssemblyPaths" ItemName="UniqueAssemblyPaths" />
129 </RemoveDuplicateAssemblies>
132 File="$(OutDir)/assemblylist.flat.txt"
133 Lines="@(UniqueAssemblyPaths)"
137 <GenerateAssemblyList
138 InputListLocation="$(OutDir)assemblylist.flat.txt"
139 OutputListLocation="$(OutDir)assemblylist.txt"
142 <Message Text="Archiving Perf test assemblies for project: $(OutDir)" Importance="High" />
143 <MSBuild Projects="$(MSBuildProjectFile)" Properties="OutDir=$(OutDir);TestArchiveDir=$(TestArchiveDir);TestProjectName=$(TestProjectName)" Targets="ArchiveTestBuild"/>