diff --git a/Directory.Build.props b/Directory.Build.props index 5dcb7fc2..a3466635 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -11,5 +11,10 @@ false true true + true + false + + + true \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index e14533e2..a6d1839c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,10 +1,11 @@ true - 16.9.0 - 15.9.20 - 17.7.2 - 17.8.3 + + + 17.11.4 + 16.11.0 @@ -13,21 +14,25 @@ - + - - + + + + + + - - + + - - + + - + diff --git a/azure-pipelines.yml b/azure-pipelines.yml index d05e5acb..6e8e23c0 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -6,6 +6,7 @@ variables: BuildConfiguration: 'Debug' BuildPlatform: 'Any CPU' DotNet8Version: '8.x' + DotNet9Version: '9.x' MSBuildArgs: '"/p:Platform=$(BuildPlatform)" "/p:Configuration=$(BuildConfiguration)" "/BinaryLogger:$(Build.SourcesDirectory)\$(ArtifactsDirectoryName)\msbuild.binlog"' SignType: 'Test' @@ -39,6 +40,12 @@ jobs: inputs: version: '$(DotNet8Version)' + - task: UseDotNet@2 + displayName: 'Install .NET $(DotNet9Version)' + inputs: + version: '$(DotNet9Version)' + includePreviewVersions: true + - task: DotNetCoreCLI@2 displayName: 'Build Solution' inputs: @@ -61,6 +68,14 @@ jobs: testRunTitle: 'Windows .NET 8.0' condition: succeededOrFailed() + - task: DotNetCoreCLI@2 + displayName: 'Run Unit Tests (.NET 9.0)' + inputs: + command: 'test' + arguments: '--no-restore --no-build --framework net9.0 /noautorsp' + testRunTitle: 'Windows .NET 9.0' + condition: succeededOrFailed() + - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' inputs: @@ -79,6 +94,12 @@ jobs: inputs: version: '$(DotNet8Version)' + - task: UseDotNet@2 + displayName: 'Install .NET $(DotNet9Version)' + inputs: + version: '$(DotNet9Version)' + includePreviewVersions: true + - task: DotNetCoreCLI@2 displayName: 'dotnet build' inputs: @@ -93,6 +114,14 @@ jobs: testRunTitle: 'Linux .NET 8.0' condition: succeededOrFailed() + - task: DotNetCoreCLI@2 + displayName: 'Run Unit Tests (.NET 9.0)' + inputs: + command: 'test' + arguments: '--no-restore --no-build --framework net9.0 /noautorsp' + testRunTitle: 'Linux .NET 9.0' + condition: succeededOrFailed() + - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' inputs: @@ -111,6 +140,12 @@ jobs: inputs: version: '$(DotNet8Version)' + - task: UseDotNet@2 + displayName: 'Install .NET $(DotNet9Version)' + inputs: + version: '$(DotNet9Version)' + includePreviewVersions: true + - task: DotNetCoreCLI@2 displayName: 'dotnet build' inputs: @@ -125,6 +160,14 @@ jobs: testRunTitle: 'MacOS .NET 8.0' condition: succeededOrFailed() + - task: DotNetCoreCLI@2 + displayName: 'Run Unit Tests (.NET 9.0)' + inputs: + command: 'test' + arguments: '--no-restore --no-build --framework net9.0 /noautorsp' + testRunTitle: 'MacOS .NET 9.0' + condition: succeededOrFailed() + - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' inputs: diff --git a/global.json b/global.json index 9f8ce3da..9629ceee 100644 --- a/global.json +++ b/global.json @@ -1,7 +1,8 @@ { "sdk": { - "version": "8.0.400", - "rollForward": "latestMinor" + "version": "9.0.100-rc.1.24452.12", + "rollForward": "latestMinor", + "allowPrerelease": true }, "msbuild-sdks": { "Microsoft.Build.NoTargets": "3.7.56" diff --git a/samples/NoTargets/SampleNoTargets/SampleNoTargets.csproj b/samples/NoTargets/SampleNoTargets/SampleNoTargets.csproj index ff82af62..6e2e708c 100644 --- a/samples/NoTargets/SampleNoTargets/SampleNoTargets.csproj +++ b/samples/NoTargets/SampleNoTargets/SampleNoTargets.csproj @@ -1,4 +1,4 @@ - + net8.0 diff --git a/src/Artifacts.UnitTests/Microsoft.Build.Artifacts.UnitTests.csproj b/src/Artifacts.UnitTests/Microsoft.Build.Artifacts.UnitTests.csproj index c3bc02bc..bef18256 100644 --- a/src/Artifacts.UnitTests/Microsoft.Build.Artifacts.UnitTests.csproj +++ b/src/Artifacts.UnitTests/Microsoft.Build.Artifacts.UnitTests.csproj @@ -1,6 +1,6 @@  - net472;net8.0 + net472;net8.0;net9.0 diff --git a/src/Artifacts/Microsoft.Build.Artifacts.csproj b/src/Artifacts/Microsoft.Build.Artifacts.csproj index b11e95ad..158d8e1b 100644 --- a/src/Artifacts/Microsoft.Build.Artifacts.csproj +++ b/src/Artifacts/Microsoft.Build.Artifacts.csproj @@ -15,14 +15,11 @@ - - - + + + + + - net472;net8.0 + net472;net8.0;net9.0 diff --git a/src/CentralPackageVersions/Microsoft.Build.CentralPackageVersions.csproj b/src/CentralPackageVersions/Microsoft.Build.CentralPackageVersions.csproj index 5e8f5976..2127c8b7 100644 --- a/src/CentralPackageVersions/Microsoft.Build.CentralPackageVersions.csproj +++ b/src/CentralPackageVersions/Microsoft.Build.CentralPackageVersions.csproj @@ -1,6 +1,6 @@  - net40;netstandard2.0 + netstandard2.0 Provides the ability to centrally manage your NuGet package versions when using PackageReference. MSBuild MSBuildSdk $(BaseArtifactsPath)\$(MSBuildProjectName)\ diff --git a/src/CopyOnWrite.UnitTests/Microsoft.Build.CopyOnWrite.UnitTests.csproj b/src/CopyOnWrite.UnitTests/Microsoft.Build.CopyOnWrite.UnitTests.csproj index a1d368de..044ef657 100644 --- a/src/CopyOnWrite.UnitTests/Microsoft.Build.CopyOnWrite.UnitTests.csproj +++ b/src/CopyOnWrite.UnitTests/Microsoft.Build.CopyOnWrite.UnitTests.csproj @@ -1,11 +1,11 @@  - net472;net8.0 + net472;net8.0;net9.0 Enable - + diff --git a/src/CopyOnWrite/Microsoft.Build.CopyOnWrite.csproj b/src/CopyOnWrite/Microsoft.Build.CopyOnWrite.csproj index d0032c19..ff81cff8 100644 --- a/src/CopyOnWrite/Microsoft.Build.CopyOnWrite.csproj +++ b/src/CopyOnWrite/Microsoft.Build.CopyOnWrite.csproj @@ -31,7 +31,9 @@ + diff --git a/src/NoTargets.UnitTests/Microsoft.Build.NoTargets.UnitTests.csproj b/src/NoTargets.UnitTests/Microsoft.Build.NoTargets.UnitTests.csproj index f3ee900d..3c42cec4 100644 --- a/src/NoTargets.UnitTests/Microsoft.Build.NoTargets.UnitTests.csproj +++ b/src/NoTargets.UnitTests/Microsoft.Build.NoTargets.UnitTests.csproj @@ -1,11 +1,11 @@  - net472;net8.0 + net472;net8.0;net9.0 + ShadeDependencies="NuGet.Frameworks" /> diff --git a/src/NoTargets.UnitTests/NoTargetsTests.cs b/src/NoTargets.UnitTests/NoTargetsTests.cs index 11747a23..cfe1483f 100644 --- a/src/NoTargets.UnitTests/NoTargetsTests.cs +++ b/src/NoTargets.UnitTests/NoTargetsTests.cs @@ -91,6 +91,8 @@ public void DoNotReferenceOutputAssemblies() path: Path.Combine(TestRootPath, "ProjectA", "ProjectA.csproj"), #if NETFRAMEWORK || NET8_0 targetFramework: "net8.0") +#elif NET9_0 + targetFramework: "net9.0") #endif .Save(); @@ -264,35 +266,76 @@ public void SimpleBuild(string projectExtension) buildOutput.Messages.High.ShouldContain("86F00AF59170450E9D687652D74A6394"); } - [Theory] -#if !NETFRAMEWORK - [InlineData(".csproj")] -#endif - [InlineData(".proj", Skip = "Currently broken because of a regression in Static Graph when the extension is .proj")] - public void StaticGraphBuildsSucceed(string projectExtension) + [Fact] + public void StaticGraphBuildsSucceed() { ProjectCreator sdkReference = ProjectCreator.Templates.SdkCsproj( Path.Combine(TestRootPath, "sdkstyle", "sdkstyle.csproj")) .Save(); + + ProjectCreator noTargets = ProjectCreator.Templates.NoTargetsProject( + path: Path.Combine(TestRootPath, "notargets", "notargets.csproj"), + customAction: creator => + { + creator.ItemProjectReference(sdkReference, referenceOutputAssembly: false); + }).Save(); + + ProjectCreator project = ProjectCreator.Templates.SdkCsproj( + Path.Combine(TestRootPath, "main", $"main.csproj"), + projectCreator: creator => + { + creator.ItemProjectReference(noTargets, referenceOutputAssembly: false); + }) + .Save() + .TryBuild("Restore", out bool result, out BuildOutput restoreOutput); + + result.ShouldBeTrue(restoreOutput.GetConsoleLog()); + + using (BuildManager buildManager = new BuildManager()) + using (ProjectCollection projectCollection = new ProjectCollection()) + { + try + { + BuildOutput buildOutput = BuildOutput.Create(); + + buildManager.BeginBuild( + new BuildParameters(projectCollection) + { + Loggers = new[] { buildOutput }, + IsolateProjects = true, + }); + GraphBuildResult graphResult = buildManager.BuildRequest( + new GraphBuildRequestData( + [new ProjectGraphEntryPoint(project.FullPath, new Dictionary())], + new List { "Build" })); + var console = buildOutput.GetConsoleLog(); + graphResult.OverallResult.ShouldBe(BuildResultCode.Success, graphResult.Exception?.ToString()); + } + finally + { + buildManager.EndBuild(); + } + } + } + #if NETFRAMEWORK + [Fact] + public void StaticGraphBuildsSucceedLegacyCsproj() + { ProjectCreator legacyReference = ProjectCreator.Templates.LegacyCsproj( Path.Combine(TestRootPath, "legacy", "legacy.csproj"), targetFrameworkVersion: "v4.7.2") .Save(); -#endif ProjectCreator noTargets = ProjectCreator.Templates.NoTargetsProject( path: Path.Combine(TestRootPath, "notargets", "notargets.csproj"), customAction: creator => { - creator.ItemProjectReference(sdkReference, referenceOutputAssembly: false); -#if NETFRAMEWORK creator.ItemProjectReference(legacyReference, referenceOutputAssembly: false); -#endif }).Save(); ProjectCreator project = ProjectCreator.Templates.SdkCsproj( - Path.Combine(TestRootPath, "main", $"main{projectExtension}"), + Path.Combine(TestRootPath, "main", $"main.csproj"), projectCreator: creator => { creator.ItemProjectReference(noTargets, referenceOutputAssembly: false); @@ -318,10 +361,10 @@ public void StaticGraphBuildsSucceed(string projectExtension) GraphBuildResult graphResult = buildManager.BuildRequest( new GraphBuildRequestData( - new[] { new ProjectGraphEntryPoint(project.FullPath) }, - new[] { "Build" })); + new[] { new ProjectGraphEntryPoint(project.FullPath, new Dictionary()) }, + new List { "Build" })); - graphResult.OverallResult.ShouldBe(BuildResultCode.Success, buildOutput.GetConsoleLog()); + graphResult.OverallResult.ShouldBe(BuildResultCode.Success, graphResult.Exception?.ToString()); } finally { @@ -329,6 +372,7 @@ public void StaticGraphBuildsSucceed(string projectExtension) } } } +#endif [Theory] [InlineData(".csproj", "Build")] diff --git a/src/NoTargets/Microsoft.Build.NoTargets.csproj b/src/NoTargets/Microsoft.Build.NoTargets.csproj index 68bd12bd..dfefebae 100644 --- a/src/NoTargets/Microsoft.Build.NoTargets.csproj +++ b/src/NoTargets/Microsoft.Build.NoTargets.csproj @@ -1,6 +1,6 @@  - net40;netstandard2.0 + netstandard2.0 Provides targets for projects that do not compile an assembly. MSBuild MSBuildSdk notargets notarget $(BaseArtifactsPath)$(MSBuildProjectName)\ diff --git a/src/Traversal.UnitTests/Microsoft.Build.Traversal.UnitTests.csproj b/src/Traversal.UnitTests/Microsoft.Build.Traversal.UnitTests.csproj index 63bf44cb..8fc583fa 100644 --- a/src/Traversal.UnitTests/Microsoft.Build.Traversal.UnitTests.csproj +++ b/src/Traversal.UnitTests/Microsoft.Build.Traversal.UnitTests.csproj @@ -1,6 +1,6 @@  - net472;net8.0 + net472;net8.0;net9.0 diff --git a/src/Traversal.UnitTests/TraversalTests.cs b/src/Traversal.UnitTests/TraversalTests.cs index c5f4d50f..7da385c6 100644 --- a/src/Traversal.UnitTests/TraversalTests.cs +++ b/src/Traversal.UnitTests/TraversalTests.cs @@ -584,7 +584,7 @@ public void StaticGraphBuildAndRestoreSucceed() targetsToBuild: new[] { "Restore" }); var graphBuildRequestData = new GraphBuildRequestData( - projectGraphEntryPoints: new[] { new ProjectGraphEntryPoint(traversalProject.FullPath) }, + projectGraphEntryPoints: new[] { new ProjectGraphEntryPoint(traversalProject.FullPath, new Dictionary()) }, targetsToBuild: new[] { "Build" }); var graphRestoreResult = buildManager.BuildRequest(graphRestoreRequestData); diff --git a/src/Traversal/Microsoft.Build.Traversal.csproj b/src/Traversal/Microsoft.Build.Traversal.csproj index 964ac46b..ada78b14 100644 --- a/src/Traversal/Microsoft.Build.Traversal.csproj +++ b/src/Traversal/Microsoft.Build.Traversal.csproj @@ -1,6 +1,6 @@  - net40;netstandard2.0 + net472;netstandard2.0 Provides MSBuild traversal logic. MSBuild MSBuildSdk traversal dirs $(BaseArtifactsPath)$(MSBuildProjectName)\