diff --git a/src/BenchmarkDotNet/Jobs/Argument.cs b/src/BenchmarkDotNet/Jobs/Argument.cs
index c86c83906a..a83c738915 100644
--- a/src/BenchmarkDotNet/Jobs/Argument.cs
+++ b/src/BenchmarkDotNet/Jobs/Argument.cs
@@ -45,6 +45,19 @@ public MonoArgument(string value) : base(value)
/// example: new MsBuildArgument("/p:MyCustomSetting=123")
///
[PublicAPI]
+
+ ///
+ /// A specialized MSBuild argument that sets a property using a quoted, semicolon-separated list of values.
+ ///
+ public class MsBuildProperty : MsBuildArgument
+ {
+ public MsBuildProperty(string key, params string[] values)
+ : base($"/p:{key}=\\\"{string.Join(";", values)}\\\"")
+ {
+ }
+
+
+ }
public class MsBuildArgument : Argument
{
public MsBuildArgument(string value) : base(value) { }
diff --git a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/MsBuildArgumentTests.cs b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/MsBuildArgumentTests.cs
index f4619040cc..22c346ec2d 100644
--- a/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/MsBuildArgumentTests.cs
+++ b/tests/BenchmarkDotNet.IntegrationTests.ManualRunning/MsBuildArgumentTests.cs
@@ -24,6 +24,13 @@ public void ProcessIsBuiltWithCustomProperty(bool setCustomProperty)
CanExecute(config);
}
+ [Fact]
+
+ public void MsBuildProperty_ShouldWrapMultipleValuesInQuotes()
+ {
+ var arg = new MsBuildProperty("DefineConstants", "FOO", "BAR");
+ Assert.Equal("/p:DefineConstants=\"FOO;BAR\"", arg.TextRepresentation);
+ }
[Fact]
public void MultipleProcessesAreBuiltWithCorrectProperties()
{