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": {