diff --git a/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/DirectoryPackagesPropsTests.cs b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/DirectoryPackagesPropsTests.cs
new file mode 100644
index 0000000..ed20c8f
--- /dev/null
+++ b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/DirectoryPackagesPropsTests.cs
@@ -0,0 +1,60 @@
+// Copyright (c) Jeff Kluge. All rights reserved.
+//
+// Licensed under the MIT license.
+
+using Shouldly;
+using System.Collections.Generic;
+using System.IO;
+using Xunit;
+
+namespace Microsoft.Build.Utilities.ProjectCreation.UnitTests
+{
+ public class DirectoryPackagesPropsTests : TestBase
+ {
+ [Fact]
+ public void Default()
+ {
+ ProjectCreator creator = ProjectCreator.Templates.DirectoryPackagesProps();
+
+ creator.Xml.ShouldBe(
+@"
+
+ true
+
+",
+StringCompareShould.IgnoreLineEndings);
+
+ creator.FullPath.ShouldBe(Path.Combine(Directory.GetCurrentDirectory(), "Directory.Packages.props"));
+ }
+
+ [Fact]
+ public void PackageVersions()
+ {
+ ProjectCreator creator = ProjectCreator.Templates.DirectoryPackagesProps(
+ new Dictionary
+ {
+ ["Newtonsoft.Json"] = "13.0.1",
+ ["Serilog"] = "3.1.0",
+ },
+ directory: TestRootPath);
+
+ creator.Xml.ShouldBe(
+@"
+
+ true
+
+
+
+ 13.0.1
+
+
+ 3.1.0
+
+
+",
+StringCompareShould.IgnoreLineEndings);
+
+ creator.FullPath.ShouldBe(Path.Combine(TestRootPath, "Directory.Packages.props"));
+ }
+ }
+}
diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs
index e759d28..4b93de1 100644
--- a/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs
+++ b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs
@@ -502,6 +502,12 @@ private bool Build(bool restore, string[]? targets, IDictionary?
{
return false;
}
+
+ bool buildResult = BuildHost.TryBuild(FullPath, ProjectCollection, buildOutput, out targetOutputs, targets: targets, globalProperties: globalProperties);
+
+ ResetProjectInstance();
+
+ return buildResult;
}
ProjectInstance projectInstance;
diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreatorTemplates/DirectoryPackagesProps.cs b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreatorTemplates/DirectoryPackagesProps.cs
new file mode 100644
index 0000000..e0e9d72
--- /dev/null
+++ b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreatorTemplates/DirectoryPackagesProps.cs
@@ -0,0 +1,52 @@
+// Copyright (c) Jeff Kluge. All rights reserved.
+//
+// Licensed under the MIT license.
+
+using Microsoft.Build.Evaluation;
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Microsoft.Build.Utilities.ProjectCreation
+{
+ public partial class ProjectCreatorTemplates
+ {
+ ///
+ /// Creates a Directory.Packages.props file with central package management enabled.
+ ///
+ /// An optional collection of package IDs and versions to write to the file.
+ /// An optional relative or full directory for the file. The default is the current directory.
+ /// An optional delegate to call in the body of the file.
+ /// An optional to use when loading the file.
+ /// An optional specifying options when creating a new file.
+ /// An optional containing global properties for the file.
+ /// A object that is used to construct an MSBuild file.
+ public ProjectCreator DirectoryPackagesProps(
+ IDictionary? packageVersions = null,
+ string? directory = null,
+ Action? projectCreator = null,
+ ProjectCollection? projectCollection = null,
+ NewProjectFileOptions? projectFileOptions = NewProjectFileOptions.None,
+ IDictionary? globalProperties = null)
+ {
+ string directoryPath = directory ?? Directory.GetCurrentDirectory();
+
+ ProjectCreator project = ProjectCreator.Create(
+ Path.Combine(directoryPath, "Directory.Packages.props"),
+ projectCollection: projectCollection,
+ projectFileOptions: projectFileOptions,
+ globalProperties: globalProperties)
+ .Property("ManagePackageVersionsCentrally", "true");
+
+ if (packageVersions != null)
+ {
+ foreach (KeyValuePair packageVersion in packageVersions)
+ {
+ project.ItemPackageVersion(packageVersion.Key, packageVersion.Value);
+ }
+ }
+
+ return project.CustomAction(projectCreator);
+ }
+ }
+}
diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net10.0/PublicAPI.Unshipped.txt b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net10.0/PublicAPI.Unshipped.txt
index a800721..4300428 100644
--- a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net10.0/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net10.0/PublicAPI.Unshipped.txt
@@ -13,6 +13,7 @@ Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward.LatestPatch =
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(Microsoft.Build.Utilities.ProjectCreation.Package! package, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(string! include, string! version, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.TryBuild(System.Collections.Generic.IDictionary? globalProperties, out bool result) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
+Microsoft.Build.Utilities.ProjectCreation.ProjectCreatorTemplates.DirectoryPackagesProps(System.Collections.Generic.IDictionary? packageVersions = null, string? directory = null, System.Action? projectCreator = null, Microsoft.Build.Evaluation.ProjectCollection? projectCollection = null, Microsoft.Build.Evaluation.NewProjectFileOptions? projectFileOptions = Microsoft.Build.Evaluation.NewProjectFileOptions.None, System.Collections.Generic.IDictionary? globalProperties = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(string? directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(System.IO.DirectoryInfo! directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.implicit operator string!(Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator! creator) -> string!
diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net472/PublicAPI.Unshipped.txt b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net472/PublicAPI.Unshipped.txt
index a800721..4300428 100644
--- a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net472/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net472/PublicAPI.Unshipped.txt
@@ -13,6 +13,7 @@ Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward.LatestPatch =
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(Microsoft.Build.Utilities.ProjectCreation.Package! package, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(string! include, string! version, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.TryBuild(System.Collections.Generic.IDictionary? globalProperties, out bool result) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
+Microsoft.Build.Utilities.ProjectCreation.ProjectCreatorTemplates.DirectoryPackagesProps(System.Collections.Generic.IDictionary? packageVersions = null, string? directory = null, System.Action? projectCreator = null, Microsoft.Build.Evaluation.ProjectCollection? projectCollection = null, Microsoft.Build.Evaluation.NewProjectFileOptions? projectFileOptions = Microsoft.Build.Evaluation.NewProjectFileOptions.None, System.Collections.Generic.IDictionary? globalProperties = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(string? directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(System.IO.DirectoryInfo! directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.implicit operator string!(Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator! creator) -> string!
diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net8.0/PublicAPI.Unshipped.txt b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net8.0/PublicAPI.Unshipped.txt
index a800721..4300428 100644
--- a/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net8.0/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.Build.Utilities.ProjectCreation/PublicAPI/net8.0/PublicAPI.Unshipped.txt
@@ -13,6 +13,7 @@ Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward.LatestPatch =
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(Microsoft.Build.Utilities.ProjectCreation.Package! package, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.ItemPackageVersion(string! include, string! version, System.Collections.Generic.IDictionary? metadata = null, string? condition = null, string? label = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
Microsoft.Build.Utilities.ProjectCreation.ProjectCreator.TryBuild(System.Collections.Generic.IDictionary? globalProperties, out bool result) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
+Microsoft.Build.Utilities.ProjectCreation.ProjectCreatorTemplates.DirectoryPackagesProps(System.Collections.Generic.IDictionary? packageVersions = null, string? directory = null, System.Action? projectCreator = null, Microsoft.Build.Evaluation.ProjectCollection? projectCollection = null, Microsoft.Build.Evaluation.NewProjectFileOptions? projectFileOptions = Microsoft.Build.Evaluation.NewProjectFileOptions.None, System.Collections.Generic.IDictionary? globalProperties = null) -> Microsoft.Build.Utilities.ProjectCreation.ProjectCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(string? directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.Create(System.IO.DirectoryInfo! directory, string! sdkVersion, Microsoft.Build.Utilities.ProjectCreation.GlobalJsonSdkRollForward? rollForward = null, bool? allowPrerelease = null) -> Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator!
static Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator.implicit operator string!(Microsoft.Build.Utilities.ProjectCreation.GlobalJsonCreator! creator) -> string!
diff --git a/version.json b/version.json
index b4515db..8867647 100644
--- a/version.json
+++ b/version.json
@@ -1,5 +1,5 @@
{
- "version": "19.0",
+ "version": "19.1",
"assemblyVersion": "1.0",
"buildNumberOffset": -1,
"nugetPackageVersion": {