Skip to content

Commit cc7b7d1

Browse files
authored
Add extension point to override TargetFramework in consuming project (#6361)
* Add extension point to override TargetFramework in consumer
1 parent 46510f3 commit cc7b7d1

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/ChooseBestP2PTargetFrameworkTask.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Microsoft.Build.Framework;
5+
using System;
56
using System.IO;
67

78
namespace Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk
@@ -34,11 +35,17 @@ public override bool Execute()
3435
targetFrameworksValue = projectReference.GetMetadata("TargetFrameworks");
3536
}
3637
string[] targetFrameworks = targetFrameworksValue.Split(';');
38+
39+
string referringTargetFramework = projectReference.GetMetadata("ReferringTargetFramework");
40+
if (string.IsNullOrWhiteSpace(referringTargetFramework))
41+
{
42+
referringTargetFramework = TargetFramework;
43+
}
3744

38-
string bestTargetFramework = targetFrameworkResolver.GetBestSupportedTargetFramework(targetFrameworks, TargetFramework);
45+
string bestTargetFramework = targetFrameworkResolver.GetBestSupportedTargetFramework(targetFrameworks, referringTargetFramework);
3946
if (bestTargetFramework == null)
4047
{
41-
Log.LogError($"Not able to find a compatible supported target framework for {TargetFramework} in Project {Path.GetFileName(projectReference.ItemSpec)}. The Supported Configurations are {string.Join(", ", targetFrameworks)}");
48+
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)}");
4249
}
4350

4451
projectReference.SetMetadata("SetTargetFramework", "TargetFramework=" + bestTargetFramework);

src/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.Sdk.targets

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,25 @@
6767
Targets="GetTargetFrameworks"
6868
BuildInParallel="$(BuildInParallel)"
6969
RemoveProperties="TargetFramework;RuntimeIdentifier"
70+
Condition="'%(ProjectReference.SkipGetTargetFrameworkProperties)' != 'true'"
7071
SkipNonexistentTargets="true">
71-
<Output TaskParameter="TargetOutputs" ItemName="_ProjectRefWithTfms"/>
72+
<Output TaskParameter="TargetOutputs" ItemName="_ProjectReferenceWithTargetFrameworks" />
7273
</MSBuild>
73-
74+
7475
<PropertyGroup>
7576
<_OriginalTargetFramework Condition="'$(_OriginalTargetFramework)' == ''">$(TargetFramework)</_OriginalTargetFramework>
7677
</PropertyGroup>
7778

7879
<ChooseBestP2PTargetFrameworkTask TargetFramework="$(_OriginalTargetFramework)"
79-
ProjectReferencesWithTargetFrameworks="@(_ProjectRefWithTfms)"
80+
ProjectReferencesWithTargetFrameworks="@(_ProjectReferenceWithTargetFrameworks)"
8081
RuntimeGraph="$(RuntimeGraph)" >
81-
<Output TaskParameter="AnnotatedProjectReferencesWithSetTargetFramework" ItemName="_ProjectReferencesWithBestTargetFrameworks" />
82+
<Output TaskParameter="AnnotatedProjectReferencesWithSetTargetFramework" ItemName="_ProjectReferenceWithBestTargetFramework" />
8283
</ChooseBestP2PTargetFrameworkTask>
8384

8485
<ItemGroup>
8586
<ProjectReference Remove="@(ProjectReference)" />
86-
<ProjectReference Include="@(_ProjectReferencesWithBestTargetFrameworks)" SkipGetTargetFrameworkProperties="true"/>
87+
<ProjectReference Include="@(_ProjectReferenceWithBestTargetFramework)"
88+
SkipGetTargetFrameworkProperties="true" />
8789
</ItemGroup>
8890
</Target>
8991

0 commit comments

Comments
 (0)