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));