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)\