diff --git a/src/Build.UnitTests/Evaluation/IntrinsicFunctionOverload_Tests.cs b/src/Build.UnitTests/Evaluation/IntrinsicFunctionOverload_Tests.cs index 8f162834b18..405aa0436af 100644 --- a/src/Build.UnitTests/Evaluation/IntrinsicFunctionOverload_Tests.cs +++ b/src/Build.UnitTests/Evaluation/IntrinsicFunctionOverload_Tests.cs @@ -1,6 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System; using System.IO; using Microsoft.Build.Evaluation; using Microsoft.Build.Framework; @@ -568,5 +569,26 @@ public void MSBuildModuloReal() ProjectProperty? actualProperty = project.GetProperty("Actual"); actualProperty.EvaluatedValue.ShouldBe(expected); } + + [Fact] + public void SystemUriEscapeDataString() + { + const string projectContent = @" + + + hello world & friends + $([System.Uri]::EscapeDataString($(TestInput))) + + "; + + string expected = Uri.EscapeDataString("hello world & friends"); + + using TestEnvironment env = TestEnvironment.Create(); + + using ProjectFromString projectFromString = new(projectContent.Cleanup()); + Project project = projectFromString.Project; + ProjectProperty? actualProperty = project.GetProperty("Escaped"); + actualProperty.EvaluatedValue.ShouldBe(expected); + } } } diff --git a/src/Build/Resources/Constants.cs b/src/Build/Resources/Constants.cs index 7c848594fba..7d439a637c1 100644 --- a/src/Build/Resources/Constants.cs +++ b/src/Build/Resources/Constants.cs @@ -394,6 +394,7 @@ private static void InitializeAvailableMethods() availableStaticMethods.TryAdd("System.StringComparer", new Tuple(null, typeof(StringComparer))); availableStaticMethods.TryAdd("System.TimeSpan", new Tuple(null, typeof(TimeSpan))); availableStaticMethods.TryAdd("System.Text.RegularExpressions.Regex", new Tuple(null, typeof(Regex))); + availableStaticMethods.TryAdd("System.Uri", new Tuple(null, typeof(Uri))); availableStaticMethods.TryAdd("System.UriBuilder", new Tuple(null, typeof(UriBuilder))); availableStaticMethods.TryAdd("System.Version", new Tuple(null, typeof(Version))); availableStaticMethods.TryAdd("Microsoft.Build.Utilities.ToolLocationHelper", new Tuple("Microsoft.Build.Utilities.ToolLocationHelper, Microsoft.Build.Utilities.Core, Version=" + MSBuildConstants.CurrentAssemblyVersion + ", Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", null));