diff --git a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/ChooseBestP2PTargetFrameworkTask.cs b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/ChooseBestP2PTargetFrameworkTask.cs index b1cd848a5f8..ea5af527553 100644 --- a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/ChooseBestP2PTargetFrameworkTask.cs +++ b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/ChooseBestP2PTargetFrameworkTask.cs @@ -3,37 +3,36 @@ using Microsoft.Build.Framework; using System; +using System.Collections.Generic; using System.IO; namespace Microsoft.DotNet.Build.Tasks.TargetFramework { public class ChooseBestP2PTargetFrameworkTask : BuildTask { - [Required] - public string TargetFramework { get; set; } - [Required] public ITaskItem[] ProjectReferencesWithTargetFrameworks { get; set; } [Required] public string RuntimeGraph { get; set; } + [Required] + public string TargetFramework { get; set; } + + public bool OmitIncompatibleProjectReferences { get; set; } + [Output] public ITaskItem[] AnnotatedProjectReferencesWithSetTargetFramework { get; set; } public override bool Execute() { - AnnotatedProjectReferencesWithSetTargetFramework = new ITaskItem[ProjectReferencesWithTargetFrameworks.Length]; + var annotatedProjectReferencesWithSetTargetFramework = new List(ProjectReferencesWithTargetFrameworks.Length); var targetFrameworkResolver = new TargetFrameworkResolver(RuntimeGraph); for (int i = 0; i < ProjectReferencesWithTargetFrameworks.Length; i++) { ITaskItem projectReference = ProjectReferencesWithTargetFrameworks[i]; - string targetFrameworksValue = projectReference.GetMetadata("RawTargetFrameworks"); - if (string.IsNullOrEmpty(targetFrameworksValue)) - { - targetFrameworksValue = projectReference.GetMetadata("TargetFrameworks"); - } + string targetFrameworksValue = projectReference.GetMetadata("TargetFrameworks"); // Allow referencing projects with TargetFrameworks explicitely cleared out, i.e. Microsoft.Build.Traversal. if (!string.IsNullOrWhiteSpace(targetFrameworksValue)) @@ -49,6 +48,10 @@ public override bool Execute() string bestTargetFramework = targetFrameworkResolver.GetBestSupportedTargetFramework(targetFrameworks, referringTargetFramework); if (bestTargetFramework == null) { + if (OmitIncompatibleProjectReferences) + { + continue; + } 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)}"); } @@ -74,9 +77,10 @@ public override bool Execute() projectReference.SetMetadata("SkipGetTargetFrameworkProperties", "true"); } - AnnotatedProjectReferencesWithSetTargetFramework[i] = projectReference; + annotatedProjectReferencesWithSetTargetFramework.Add(projectReference); } + AnnotatedProjectReferencesWithSetTargetFramework = annotatedProjectReferencesWithSetTargetFramework.ToArray(); return !Log.HasLoggedErrors; } } diff --git a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.props b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.props index 4964ab9c0d7..9c24e29ba34 100644 --- a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.props +++ b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.props @@ -1,12 +1,5 @@ - - - <_ThisProjectBuildMetadata> - $(TargetFrameworks) - - - ..\tools\netcoreapp3.1\Microsoft.DotNet.Build.Tasks.TargetFramework.dll ..\tools\net472\Microsoft.DotNet.Build.Tasks.TargetFramework.dll diff --git a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.targets b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.targets index f3baa42542a..09bedd0094d 100644 --- a/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.targets +++ b/src/Microsoft.DotNet.Build.Tasks.TargetFramework/src/build/Microsoft.DotNet.Build.Tasks.TargetFramework.targets @@ -23,9 +23,10 @@ <_ProjectReferenceWithTargetFrameworks Include="@(ProjectReference->WithMetadataValue('SkipGetTargetFrameworkProperties', 'true'))" /> - +