diff --git a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props
index db23a7978d1c..410d78dad91d 100644
--- a/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props
+++ b/msbuild/Xamarin.Mac.Tasks/Xamarin.Mac.Common.props
@@ -26,6 +26,20 @@ Copyright (C) 2013-2014 Xamarin. All rights reserved.
<_XamarinCommonPropsHasBeenImported>true
+
+
+
+ Xamarin.Mac.NET
+
+
true
false
diff --git a/tests/mmptest/mmptest.csproj b/tests/mmptest/mmptest.csproj
index d2efabf9332b..76dfeb5f2de1 100644
--- a/tests/mmptest/mmptest.csproj
+++ b/tests/mmptest/mmptest.csproj
@@ -113,6 +113,7 @@
SdkVersions.cs
+
diff --git a/tests/mmptest/src/TargetFrameworkMutateTests.cs b/tests/mmptest/src/TargetFrameworkMutateTests.cs
new file mode 100644
index 000000000000..74912a241e4c
--- /dev/null
+++ b/tests/mmptest/src/TargetFrameworkMutateTests.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+using Xamarin.Utils;
+
+namespace Xamarin.MMP.Tests
+{
+ [TestFixture]
+ public class TargetFrameworkMutateTests
+ {
+ const string MigrateCSProjTag = "true";
+
+ public bool MatchesTFI (string expected, string buildOutput)
+ {
+ string tfiLine = buildOutput.SplitLines ().FirstOrDefault (x => x.StartsWith ("TargetFrameworkIdentifier =", StringComparison.Ordinal));
+ if (tfiLine == null)
+ return false;
+ return tfiLine.Contains (expected);
+ }
+
+ [TestCase (true)]
+ [TestCase (false)]
+ public void ShouldNotMutateWithoutOptInFlag (bool xm45)
+ {
+ MMPTests.RunMMPTest (tmpDir => {
+ TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir) {
+ XM45 = xm45
+ };
+ var buildOutput = TI.TestUnifiedExecutable (test).BuildOutput;
+ string standardTFI = xm45 ? ".NETFramework" : "Xamarin.Mac";
+ Assert.True (MatchesTFI (standardTFI, buildOutput), $"Build did not have expected TFI: {TI.PrintRedirectIfLong (buildOutput)}");
+ });
+ }
+
+ [Test]
+ public void ShouldNotMutateModernWithOptInFlag ()
+ {
+ MMPTests.RunMMPTest (tmpDir => {
+ TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir) { CSProjConfig = MigrateCSProjTag };
+ var buildOutput = TI.TestUnifiedExecutable (test).BuildOutput;
+ Assert.True (MatchesTFI ("Xamarin.Mac", buildOutput), $"Build did not have expected TFI: {TI.PrintRedirectIfLong (buildOutput)}");
+ });
+ }
+
+ [Test]
+ public void ShouldMutateFullWithOptInFlag ()
+ {
+ MMPTests.RunMMPTest (tmpDir => {
+ TI.UnifiedTestConfig test = new TI.UnifiedTestConfig (tmpDir) {
+ XM45 = true,
+ CSProjConfig = MigrateCSProjTag
+ };
+ var buildOutput = TI.TestUnifiedExecutable (test).BuildOutput;
+ Assert.True (MatchesTFI ("Xamarin.Mac.NET", buildOutput), $"Build did not have expected TFI: {TI.PrintRedirectIfLong (buildOutput)}");
+ });
+ }
+ }
+}