diff --git a/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/ChooseBestP2PTargetFrameworkTask.cs b/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/ChooseBestP2PTargetFrameworkTask.cs
index f2249e5a353..164c5b7e729 100644
--- a/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/ChooseBestP2PTargetFrameworkTask.cs
+++ b/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/ChooseBestP2PTargetFrameworkTask.cs
@@ -52,7 +52,25 @@ public override bool Execute()
Log.LogError($"Not able to find a compatible supported target framework for {referringTargetFramework} in Project {Path.GetFileName(projectReference.ItemSpec)}. The Supported Configurations are {string.Join(", ", targetFrameworks)}");
}
- projectReference.SetMetadata("SetTargetFramework", "TargetFramework=" + bestTargetFramework);
+ // Mimic msbuild's Common.targets behavior: https://github.com/dotnet/msbuild/blob/3c8fb11a080a5a15199df44fabf042a22e9ad4da/src/Tasks/Microsoft.Common.CurrentVersion.targets#L1842-L1853
+ if (projectReference.GetMetadata("HasSingleTargetFramework") != "true")
+ {
+ projectReference.SetMetadata("SetTargetFramework", "TargetFramework=" + bestTargetFramework);
+ }
+ else
+ {
+ // If the project has a single TargetFramework, we need to Undefine TargetFramework to avoid another project evaluation.
+ string undefineProperties = projectReference.GetMetadata("UndefineProperties");
+ projectReference.SetMetadata("UndefineProperties", undefineProperties + ";TargetFramework");
+ }
+
+ if (projectReference.GetMetadata("IsRidAgnostic") == "true")
+ {
+ // If the project is RID agnostic, undefine the RuntimeIdentifier property to avoid another evaluation. -->
+ string undefineProperties = projectReference.GetMetadata("UndefineProperties");
+ projectReference.SetMetadata("UndefineProperties", undefineProperties + ";RuntimeIdentifier");
+ }
+
projectReference.SetMetadata("SkipGetTargetFrameworkProperties", "true");
}
diff --git a/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/build/BinPlace.targets b/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/build/BinPlace.targets
index 940d771be58..492acab27b2 100644
--- a/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/build/BinPlace.targets
+++ b/src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/build/BinPlace.targets
@@ -9,13 +9,13 @@
+ Condition="'$(EnableBinPlacing)' == 'true' or '@(BinPlaceDir)' != ''" />
+ Outputs="unused">
<_BinPlaceItemName>%(BinPlaceDir.ItemName)
@@ -117,11 +117,17 @@
-
+
+
+ <_supportedTargetFramework Include="$(TargetFrameworks)" Condition="'$(TargetFrameworks)' != ''" />
+ <_supportedTargetFramework Include="$(TargetFramework)" Condition="'@(_supportedTargetFramework)' == '' and '$(TargetFramework)' != ''" />
+
+
+
+ SupportedTargetFrameworks="@(_supportedTargetFramework)"
+ RuntimeGraph="$(RuntimeGraph)">