From 567108423b77bb6316a1e86c1e1fa847235f8dad Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Mon, 17 Nov 2025 23:03:10 +0100 Subject: [PATCH 1/3] adapts msbuild tasks execution adapts msbuild tasks execution to use action with task parameter. removes net framework check on GitVersionTask. adds condition to msbuild targets. --- .../Extensions/ReferenceNameExtensions.cs | 4 +++- src/GitVersion.MsBuild/GitVersionTasks.cs | 12 ++++++------ .../msbuild/tools/GitVersion.MsBuild.props | 6 ------ .../msbuild/tools/GitVersion.MsBuild.targets | 13 +++++++++---- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/GitVersion.Core/Extensions/ReferenceNameExtensions.cs b/src/GitVersion.Core/Extensions/ReferenceNameExtensions.cs index 184421b020..69b6492e93 100644 --- a/src/GitVersion.Core/Extensions/ReferenceNameExtensions.cs +++ b/src/GitVersion.Core/Extensions/ReferenceNameExtensions.cs @@ -17,7 +17,9 @@ public bool TryGetSemanticVersion(IGitVersionConfiguration configuration, out Se private bool TryGetSemanticVersion(string? versionPatternPattern, string? tagPrefix, - SemanticVersionFormat format, out SemanticVersionResult result) + SemanticVersionFormat format, + // ReSharper disable once OutParameterValueIsAlwaysDiscarded.Local + out SemanticVersionResult result) { var versionPatternRegex = RegexPatterns.Cache.GetOrAdd(GetVersionInBranchPattern(versionPatternPattern)); result = default; diff --git a/src/GitVersion.MsBuild/GitVersionTasks.cs b/src/GitVersion.MsBuild/GitVersionTasks.cs index d0860b20e9..70cb0b5b98 100644 --- a/src/GitVersion.MsBuild/GitVersionTasks.cs +++ b/src/GitVersion.MsBuild/GitVersionTasks.cs @@ -17,21 +17,21 @@ public static bool Execute(GitVersionTaskBase task) var executor = serviceProvider.GetRequiredService(); return task switch { - GetVersion getVersion => ExecuteGitVersionTask(getVersion, () => executor.GetVersion(getVersion)), - UpdateAssemblyInfo updateAssemblyInfo => ExecuteGitVersionTask(updateAssemblyInfo, () => executor.UpdateAssemblyInfo(updateAssemblyInfo)), - GenerateGitVersionInformation generateGitVersionInformation => ExecuteGitVersionTask(generateGitVersionInformation, () => executor.GenerateGitVersionInformation(generateGitVersionInformation)), - WriteVersionInfoToBuildLog writeVersionInfoToBuildLog => ExecuteGitVersionTask(writeVersionInfoToBuildLog, () => executor.WriteVersionInfoToBuildLog(writeVersionInfoToBuildLog)), + GetVersion getVersion => ExecuteGitVersionTask(getVersion, executor.GetVersion), + UpdateAssemblyInfo updateAssemblyInfo => ExecuteGitVersionTask(updateAssemblyInfo, executor.UpdateAssemblyInfo), + GenerateGitVersionInformation generateGitVersionInformation => ExecuteGitVersionTask(generateGitVersionInformation, executor.GenerateGitVersionInformation), + WriteVersionInfoToBuildLog writeVersionInfoToBuildLog => ExecuteGitVersionTask(writeVersionInfoToBuildLog, executor.WriteVersionInfoToBuildLog), _ => throw new NotSupportedException($"Task type {task.GetType().Name} is not supported") }; } - private static bool ExecuteGitVersionTask(T task, Action action) + private static bool ExecuteGitVersionTask(T task, Action action) where T : GitVersionTaskBase { var taskLog = task.Log; try { - action(); + action(task); } catch (WarningException errorException) { diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props index c497718e77..60165e0d08 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props @@ -21,12 +21,6 @@ - - true - false diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets index b8f08113ea..562c2cde2b 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets @@ -18,10 +18,15 @@ $([MSBuild]::EnsureTrailingSlash($(MSBuildThisFileDirectory)$(GitVersionTargetFramework)))GitVersion.MsBuild.dll - - - - + + + + + + + + + From 86c66453aac6dd520e92f5cff290e92594bf3940 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Tue, 18 Nov 2025 00:39:12 +0100 Subject: [PATCH 2/3] enable testing with Full Framework This enabled testing the GitVersion.MsBuild with the full .NET Framework's version of msbuild --- .../Tasks/ArtifactsMsBuildFullTest.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs b/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs index f4d34e623e..6551b6475b 100644 --- a/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs +++ b/build/artifacts/Tasks/ArtifactsMsBuildFullTest.cs @@ -19,9 +19,13 @@ public override void Run(BuildContext context) if (context.Version == null) return; var version = context.Version.NugetVersion; + var fullSemVer = context.Version.GitVersion.FullSemVer; var nugetSource = context.MakeAbsolute(Paths.Nuget).FullPath; + const int toolVersionValue = 11; // Workaround for now. It should be removed when https://github.com/cake-build/cake/issues/4658 is merged + var isMsBuildToolVersionValid = Enum.IsDefined(typeof(MSBuildToolVersion), toolVersionValue); + context.Information("\nTesting msbuild task with dotnet build\n"); foreach (var netVersion in Constants.DotnetVersions) { @@ -40,7 +44,27 @@ public override void Run(BuildContext context) }); var exe = Paths.Integration.Combine("build").Combine(framework).CombineWithFilePath("app.dll"); - context.ValidateOutput("dotnet", exe.FullPath, context.Version.GitVersion.FullSemVer); + context.ValidateOutput("dotnet", exe.FullPath, fullSemVer); + + if (!isMsBuildToolVersionValid) continue; + + const MSBuildToolVersion toolVersion = (MSBuildToolVersion)toolVersionValue; + context.Information("\nTesting msbuild task with msbuild (for full framework)\n"); + + var msBuildSettings = new MSBuildSettings + { + Verbosity = Verbosity.Minimal, + ToolVersion = toolVersion, + Restore = true + }; + + msBuildSettings.WithProperty("GitVersionMsBuildVersion", version); + msBuildSettings.WithProperty("RestoreSource", nugetSource); + + context.MSBuild(projPath.FullPath, msBuildSettings); + + var fullExe = Paths.Integration.Combine("build").CombineWithFilePath("app.exe"); + context.ValidateOutput(fullExe.FullPath, null, fullSemVer); } } } From 9aa4c703ce7da5cd6b46864b398897a81f7ab186 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Tue, 18 Nov 2025 01:03:07 +0100 Subject: [PATCH 3/3] disables task on msbuild version <18 disables GitVersion task on .NET Framework with MSBuild < 18. updates conditions for UsingTask to use explicit string comparisons. --- .../msbuild/tools/GitVersion.MsBuild.props | 6 ++++++ .../msbuild/tools/GitVersion.MsBuild.targets | 18 +++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props index 60165e0d08..0b63e3feee 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props @@ -21,6 +21,12 @@ + + true + false diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets index 562c2cde2b..adb0f1e6bd 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets @@ -18,15 +18,15 @@ $([MSBuild]::EnsureTrailingSlash($(MSBuildThisFileDirectory)$(GitVersionTargetFramework)))GitVersion.MsBuild.dll - - - - - - - - - + + + + + + + + +