|
| 1 | +<Project> |
| 2 | + <Import Project="$(RepoRoot)eng\targets\ResolveReferences.targets" /> |
| 3 | + |
| 4 | + <ItemGroup> |
| 5 | + <TestConsoleAppSourceFiles Condition="'@(TestConsoleAppSourceFiles)' == ''" Include="$(MSBuildProjectDirectory)\*.cs" /> |
| 6 | + |
| 7 | + <TestSupportFiles Include="$(MSBuildThisFileDirectory)SupportFiles\Directory.Build.*"> |
| 8 | + <DestinationFolder>$(TrimmingTestDir)</DestinationFolder> |
| 9 | + </TestSupportFiles> |
| 10 | + </ItemGroup> |
| 11 | + |
| 12 | + <Target Name="CreateTestDir" |
| 13 | + Inputs="@(TestSupportFiles)" |
| 14 | + Outputs="@(TestSupportFiles->'%(DestinationFolder)\%(FileName)%(Extension)')"> |
| 15 | + <MakeDir Directories="%(TestSupportFiles.DestinationFolder)" /> |
| 16 | + <Copy SourceFiles="@(TestSupportFiles)" DestinationFolder="%(TestSupportFiles.DestinationFolder)" /> |
| 17 | + </Target> |
| 18 | + |
| 19 | + <Target Name="GetTestConsoleApps"> |
| 20 | + <ItemGroup> |
| 21 | + <TestConsoleAppSourceFiles> |
| 22 | + <ProjectDir>$([MSBuild]::NormalizeDirectory('$(TrimmingTestProjectsDir)', '$(MSBuildProjectName)', '%(Filename)', '$(PackageRID)'))</ProjectDir> |
| 23 | + <TestRuntimeIdentifier>$(TargetRuntimeIdentifier)</TestRuntimeIdentifier> |
| 24 | + <TargetFramework>$(DefaultNetCoreTargetFramework)</TargetFramework> |
| 25 | + <TargetFramework Condition="'%(TestConsoleAppSourceFiles.TargetOS)' != ''">$(DefaultNetCoreTargetFramework)-%(TestConsoleAppSourceFiles.TargetOS)</TargetFramework> |
| 26 | + </TestConsoleAppSourceFiles> |
| 27 | + <!-- We need to separate Item metadata declaration in two in order to be able to use ProjectDir and TestRuntimeIdentifier below --> |
| 28 | + <TestConsoleAppSourceFiles> |
| 29 | + <ProjectFile>%(ProjectDir)project.csproj</ProjectFile> |
| 30 | + <TestCommand>$([MSBuild]::NormalizePath('%(ProjectDir)', 'bin', '$(Configuration)', '%(TargetFramework)', '%(TestRuntimeIdentifier)', 'publish', 'project'))</TestCommand> |
| 31 | + <TestExecutionDirectory>$([MSBuild]::NormalizeDirectory('%(ProjectDir)', 'bin', '$(Configuration)', '%(TargetFramework)', '%(TestRuntimeIdentifier)', 'publish'))</TestExecutionDirectory> |
| 32 | + </TestConsoleAppSourceFiles> |
| 33 | + </ItemGroup> |
| 34 | + |
| 35 | + <ItemGroup> |
| 36 | + <TestConsoleApps Include="@(TestConsoleAppSourceFiles->'%(ProjectFile)')"> |
| 37 | + <ProjectCompileItems>%(FullPath)</ProjectCompileItems> |
| 38 | + </TestConsoleApps> |
| 39 | + <TestConsoleApps AdditionalProperties="MSBuildEnableWorkloadResolver=$(MSBuildEnableWorkloadResolver)" Condition="'$(MSBuildEnableWorkloadResolver)' != ''" /> |
| 40 | + </ItemGroup> |
| 41 | + </Target> |
| 42 | + |
| 43 | + <Target Name="GenerateProjects" |
| 44 | + DependsOnTargets="GetTestConsoleApps;CreateTestDir" |
| 45 | + Inputs="@(TestConsoleAppSourceFiles);$(ProjectTemplate);@(TestSupportFiles)" |
| 46 | + Outputs="%(TestConsoleApps.Identity)"> |
| 47 | + <PropertyGroup> |
| 48 | + <_projectDir>%(TestConsoleApps.ProjectDir)\</_projectDir> |
| 49 | + <_projectFile>%(TestConsoleApps.ProjectFile)</_projectFile> |
| 50 | + <_projectSourceFile>%(TestConsoleApps.ProjectCompileItems)</_projectSourceFile> |
| 51 | + </PropertyGroup> |
| 52 | + |
| 53 | + <ItemGroup Condition="'$(AdditionalProjectReferences)' != ''"> |
| 54 | + <_additionalProjectReferenceTemp Include="$(AdditionalProjectReferences)" /> |
| 55 | + <_additionalProjectReference Include="<ProjectReference Include="$(LibrariesProjectRoot)%(_additionalProjectReferenceTemp.Identity)\src\%(_additionalProjectReferenceTemp.Identity).csproj" SkipUseReferenceAssembly="true" />" /> |
| 56 | + </ItemGroup> |
| 57 | + |
| 58 | + <PropertyGroup> |
| 59 | + <_additionalProjectReferencesString>@(_additionalProjectReference, '%0a')</_additionalProjectReferencesString> |
| 60 | + </PropertyGroup> |
| 61 | + |
| 62 | + <ItemGroup> |
| 63 | + <_additionalProjectSourceFiles Include="%(TestConsoleApps.AdditionalSourceFiles)" /> |
| 64 | + </ItemGroup> |
| 65 | + |
| 66 | + <ItemGroup> |
| 67 | + <_switchesAsItems Include="%(TestConsoleApps.DisabledFeatureSwitches)" Value="false" /> |
| 68 | + <_switchesAsItems Include="%(TestConsoleApps.EnabledFeatureSwitches)" Value="true" /> |
| 69 | + |
| 70 | + <_propertiesAsItems Include="%(TestConsoleApps.DisabledProperties)" Value="false" /> |
| 71 | + <_propertiesAsItems Include="%(TestConsoleApps.EnabledProperties)" Value="true" /> |
| 72 | + </ItemGroup> |
| 73 | + |
| 74 | + <PropertyGroup> |
| 75 | + <_runtimeHostConfigurationOptionsString>@(_switchesAsItems->'<RuntimeHostConfigurationOption Include="%(Identity)" Value="%(Value)" Trim="true" />', '%0a ')</_runtimeHostConfigurationOptionsString> |
| 76 | + <_additionalPropertiesString>@(_propertiesAsItems->'<%(Identity)>%(Value)</%(Identity)>', '%0a ')</_additionalPropertiesString> |
| 77 | + </PropertyGroup> |
| 78 | + |
| 79 | + <MakeDir Directories="$(_projectDir)" /> |
| 80 | + <WriteLinesToFile File="$(_projectFile)" |
| 81 | + Lines="$([System.IO.File]::ReadAllText('$(ProjectTemplate)') |
| 82 | + .Replace('{TargetFramework}', '%(TestConsoleApps.TargetFramework)') |
| 83 | + .Replace('{RuntimeIdentifier}','%(TestConsoleApps.TestRuntimeIdentifier)') |
| 84 | + .Replace('{PublishAot}','$(IsNativeAotTestProject)') |
| 85 | + .Replace('{MicrosoftNETCoreAppRuntimeVersion}','$(MicrosoftNETCoreAppRuntimeVersion)') |
| 86 | + .Replace('{RepoRoot}', '$(RepoRoot)') |
| 87 | + .Replace('{ExtraTrimmerArgs}', '%(TestConsoleApps.ExtraTrimmerArgs)') |
| 88 | + .Replace('{AdditionalProperties}', '$(_additionalPropertiesString)') |
| 89 | + .Replace('{RuntimeHostConfigurationOptions}', '$(_runtimeHostConfigurationOptionsString)') |
| 90 | + .Replace('{AdditionalProjectReferences}', '$(_additionalProjectReferencesString)') |
| 91 | + )" |
| 92 | + Overwrite="true" /> |
| 93 | + <Copy SourceFiles="$(_projectSourceFile); |
| 94 | + @(_additionalProjectSourceFiles)" |
| 95 | + DestinationFolder="$(_projectDir)" /> |
| 96 | + <Message Text="Generated $(_projectFile)" /> |
| 97 | + </Target> |
| 98 | + |
| 99 | + <Target Name="PublishTrimmedProjects" |
| 100 | + DependsOnTargets="GenerateProjects"> |
| 101 | + |
| 102 | + <MSBuild Projects="@(TestConsoleApps)" |
| 103 | + Targets="Restore" |
| 104 | + Condition="'$(SkipTrimmingProjectsRestore)' != 'true'" |
| 105 | + Properties="MSBuildRestoreSessionId=$([System.Guid]::NewGuid());Configuration=$(Configuration)" /> |
| 106 | + |
| 107 | + <MSBuild Projects="@(TestConsoleApps)" |
| 108 | + Targets="Publish" |
| 109 | + Properties="Configuration=$(Configuration);BuildProjectReferences=false" /> |
| 110 | + </Target> |
| 111 | + |
| 112 | + <Target Name="ExecuteApplications" |
| 113 | + DependsOnTargets="PublishTrimmedProjects" |
| 114 | + Inputs="%(TestConsoleApps.Identity)" |
| 115 | + Outputs="_unused" |
| 116 | + Condition="'$(ArchiveTests)' != 'true'"> |
| 117 | + |
| 118 | + <Message Importance="High" Text="[Trimming Tests] Running test: %(TestConsoleApps.ProjectCompileItems) ..." /> |
| 119 | + <Exec IgnoreExitCode="true" Command="%(TestConsoleApps.TestCommand)" StandardOutputImportance="Low" WorkingDirectory="%(TestConsoleApps.TestExecutionDirectory)"> |
| 120 | + <Output TaskParameter="ExitCode" PropertyName="ExecutionExitCode" /> |
| 121 | + </Exec> |
| 122 | + |
| 123 | + <Error Condition="'$(ExecutionExitCode)' != '100'" Text="Error: [Failed Test]: %(TestConsoleApps.ProjectCompileItems). The Command %(TestConsoleApps.TestCommand) return a non-success exit code." ContinueOnError="ErrorAndContinue" /> |
| 124 | + </Target> |
| 125 | + |
| 126 | + <Target Name="Test" DependsOnTargets="ExecuteApplications" /> |
| 127 | + <Target Name="VSTest" DependsOnTargets="Test" /> |
| 128 | + |
| 129 | + <!-- define Restore/Build to do nothing, for this project only Test does the testing --> |
| 130 | + <Target Name="Restore" /> |
| 131 | + <Target Name="Build" /> |
| 132 | +</Project> |
0 commit comments