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); } } } 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..0b63e3feee 100644 --- a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props +++ b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.props @@ -21,11 +21,11 @@ - - true + However, it is supported from msbuild version 18 or Visual Studio 2026, or using the .NET version `dotnet build` --> + true false diff --git a/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets b/src/GitVersion.MsBuild/msbuild/tools/GitVersion.MsBuild.targets index b8f08113ea..adb0f1e6bd 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 - - - - + + + + + + + + +