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