diff --git a/Packages.props b/Packages.props index 7137d4df..c3ebaa54 100644 --- a/Packages.props +++ b/Packages.props @@ -8,7 +8,7 @@ - + diff --git a/src/Traversal.UnitTests/CustomProjectCreatorTemplates.cs b/src/Traversal.UnitTests/CustomProjectCreatorTemplates.cs index baf626f8..161d9c40 100644 --- a/src/Traversal.UnitTests/CustomProjectCreatorTemplates.cs +++ b/src/Traversal.UnitTests/CustomProjectCreatorTemplates.cs @@ -13,6 +13,21 @@ public static class CustomProjectCreatorTemplates { private static readonly string ThisAssemblyDirectory = Path.GetDirectoryName(typeof(CustomProjectCreatorTemplates).Assembly.Location); + public static ProjectCreator ProjectWithBuildOutput( + this ProjectCreatorTemplates templates, + string target, + ProjectCollection projectCollection = null, + Action customAction = null) + { + return ProjectCreator.Templates.SdkCsproj( + sdk: String.Empty, + projectCreator: customAction, + projectCollection: projectCollection) + .Target(target, returns: "@(CollectedBuildOutput)") + .TargetItemInclude("CollectedBuildOutput", Path.Combine("bin", "$(MSBuildThisFileName).dll")) + .Target("Clean"); + } + public static ProjectCreator TraversalProject( this ProjectCreatorTemplates templates, string[] projectReferences = null, diff --git a/src/Traversal.UnitTests/TraversalTests.cs b/src/Traversal.UnitTests/TraversalTests.cs index 533bf9fc..df922c88 100644 --- a/src/Traversal.UnitTests/TraversalTests.cs +++ b/src/Traversal.UnitTests/TraversalTests.cs @@ -19,57 +19,34 @@ namespace Microsoft.Build.Traversal.UnitTests public class TraversalTests : MSBuildSdkTestBase { [Theory] - [InlineData(null)] [InlineData("Build")] - [InlineData("Rebuild")] + [InlineData("GetTargetPath")] public void CollectsProjectReferenceBuildTargetOutputs(string target) { - string[] projects = new[] - { - GetSkeletonCSProjWithTargetOutputs(@"A\A"), - GetSkeletonCSProjWithTargetOutputs(@"B\B"), - }.Select(i => i.FullPath).ToArray(); - - var subTraversalProject = ProjectCreator - .Templates - .TraversalProject(projects, path: GetTempFile(@"dirs\dirs.proj")) - .Save(); - - ProjectCreator - .Create(path: GetTempFile("root.proj")) - .Target("BuildTraversalProject") - .Task( - "MSBuild", - parameters: new Dictionary - { - ["Projects"] = subTraversalProject.FullPath, - ["Targets"] = "Restore", - ["Properties"] = $"MSBuildRestoreSessionId={Guid.NewGuid():N}", - }) - .Task( - "MSBuild", - parameters: new Dictionary + ProjectCreator traversalProject = ProjectCreator.Templates.TraversalProject( + projectReferences: new string[] { - ["Projects"] = subTraversalProject.FullPath, - ["Targets"] = target, + ProjectCreator.Templates.ProjectWithBuildOutput(target) + .Save(GetTempFile(Path.Combine("A", "A.csproj"))), + ProjectCreator.Templates.ProjectWithBuildOutput(target) + .Save(GetTempFile(Path.Combine("B", "B.csproj"))), }) - .TaskOutputItem("TargetOutputs", "CollectedOutputs") - .TaskMessage("%(CollectedOutputs.Identity)", MessageImportance.High) - .Save() - .TryBuild("BuildTraversalProject", out bool _, out BuildOutput buildOutput); + .Property("SkipResolvePackageAssets", bool.TrueString) + .Target("ResolvePackageAssets") + .Save(GetTempFile("dirs.proj")) + .TryBuild(target, out bool result, out BuildOutput buildOutput, out IDictionary targetOutputs); - buildOutput.Messages.High.ShouldContain("A.dll", buildOutput.GetConsoleLog()); - buildOutput.Messages.High.ShouldContain("B.dll", buildOutput.GetConsoleLog()); + result.ShouldBeTrue(buildOutput.GetConsoleLog()); - ProjectCreator GetSkeletonCSProjWithTargetOutputs(string projectName) - { - return ProjectCreator.Templates.SdkCsproj(path: GetTempFile($"{projectName}.csproj"), sdk: string.Empty) - .Target("Build", returns: "@(TestReturnItem)") - .TargetItemGroup() - .TargetItemInclude("TestReturnItem", "$(MSBuildThisFileName).dll") - .Target("Clean") - .Save(); - } + targetOutputs.ShouldContainKey(target, buildOutput.GetConsoleLog()); + + targetOutputs[target].Items.Select(i => i.ItemSpec).ShouldBe( + new[] + { + Path.Combine("bin", "A.dll"), + Path.Combine("bin", "B.dll"), + }, + buildOutput.GetConsoleLog()); } [Fact] diff --git a/src/Traversal/Sdk/Sdk.targets b/src/Traversal/Sdk/Sdk.targets index a1e28d18..3ad75345 100644 --- a/src/Traversal/Sdk/Sdk.targets +++ b/src/Traversal/Sdk/Sdk.targets @@ -95,6 +95,8 @@ + + @@ -236,10 +238,23 @@ ContinueOnError="$([MSBuild]::ValueOrDefault('$(PublishContinueOnError)', '$(ContinueOnError)'))" /> - - + + + + + + +