Skip to content

Commit 1e55736

Browse files
committed
Apply code review feedback
1 parent fb990e9 commit 1e55736

File tree

4 files changed

+41
-11
lines changed

4 files changed

+41
-11
lines changed

src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageAssets.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ public sealed class ResolvePackageAssets : TaskBase
8585
/// </summary>
8686
public bool DisableTransitiveProjectReferences { get; set; }
8787

88+
/// <summary>
89+
/// Disables FrameworkReferences from referenced projects or packages
90+
/// </summary>
91+
public bool DisableTransitiveFrameworkReferences { get; set; }
92+
8893
/// <summary>
8994
/// Do not add references to framework assemblies as specified by packages.
9095
/// </summary>
@@ -370,6 +375,7 @@ internal byte[] HashSettings()
370375
writer.Write(DisableFrameworkAssemblies);
371376
writer.Write(DisableRuntimeTargets);
372377
writer.Write(DisableTransitiveProjectReferences);
378+
writer.Write(DisableTransitiveFrameworkReferences);
373379
writer.Write(DotNetAppHostExecutableNameWithoutExtension);
374380
writer.Write(EmitAssetsLogMessages);
375381
writer.Write(EnsureRuntimePackageDependencies);
@@ -1110,11 +1116,36 @@ private void WriteTransitiveProjectReferences()
11101116

11111117
private void WriteFrameworkReferences()
11121118
{
1119+
if (_task.DisableTransitiveFrameworkReferences)
1120+
{
1121+
return;
1122+
}
1123+
1124+
// Currently there are only 2 different frameworks that we expect to
1125+
// show up as framework references, so use a list here instead of a
1126+
// HashSet
1127+
List<string> frameworkReferences = null;
1128+
11131129
foreach (var library in _runtimeTarget.Libraries)
11141130
{
11151131
foreach (var frameworkReference in library.FrameworkReferences)
11161132
{
1117-
WriteItem(frameworkReference, library);
1133+
if (frameworkReferences == null)
1134+
{
1135+
frameworkReferences = new List<string>();
1136+
}
1137+
if (!frameworkReferences.Contains(frameworkReference))
1138+
{
1139+
frameworkReferences.Add(frameworkReference);
1140+
}
1141+
}
1142+
}
1143+
1144+
if (frameworkReferences != null)
1145+
{
1146+
foreach (var frameworkReference in frameworkReferences)
1147+
{
1148+
WriteItem(frameworkReference);
11181149
}
11191150
}
11201151
}

src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,10 @@ Copyright (c) .NET Foundation. All rights reserved.
155155
</Target>
156156

157157
<Target Name="AddTransitiveFrameworkReferences" AfterTargets="ResolvePackageAssets"
158-
Condition="'@(TransitiveFrameworkReferences)' != ''" >
158+
Condition="'@(TransitiveFrameworkReference)' != ''" >
159159

160160
<ItemGroup>
161-
<!-- Deduplicate transitive framework references, and ignore any that were already directly
162-
referenced-->
163-
<_TransitiveFrameworkReferenceToResolve Include="@(TransitiveFrameworkReferences->Distinct())"/>
164-
<_TransitiveFrameworkReferenceToResolve Remove="@(FrameworkReference)" />
165-
166-
<FrameworkReference Include="@(_TransitiveFrameworkReferenceToResolve)" />
161+
<FrameworkReference Include="@(TransitiveFrameworkReference)" Exclude="@(FrameworkReference)"/>
167162
</ItemGroup>
168163

169164
</Target>

src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.PackageDependencyResolution.targets

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,7 @@ Copyright (c) .NET Foundation. All rights reserved.
246246
DisableFrameworkAssemblies="$(DisableLockFileFrameworks)"
247247
DisableRuntimeTargets="$(DisableRuntimeTargets)"
248248
DisableTransitiveProjectReferences="$(DisableTransitiveProjectReferences)"
249+
DisableTransitiveFrameworkReferences="$(DisableTransitiveFrameworkReferences)"
249250
DotNetAppHostExecutableNameWithoutExtension="$(_DotNetAppHostExecutableNameWithoutExtension)"
250251
ShimRuntimeIdentifiers="@(_PackAsToolShimRuntimeIdentifiers)"
251252
EnsureRuntimePackageDependencies="$(EnsureRuntimePackageDependencies)"
@@ -259,7 +260,7 @@ Copyright (c) .NET Foundation. All rights reserved.
259260
<Output TaskParameter="ApphostsForShimRuntimeIdentifiers" ItemName="_ApphostsForShimRuntimeIdentifiersResolvePackageAssets" />
260261
<Output TaskParameter="ContentFilesToPreprocess" ItemName="_ContentFilesToPreprocess" />
261262
<Output TaskParameter="FrameworkAssemblies" ItemName="ResolvedFrameworkAssemblies" />
262-
<Output TaskParameter="FrameworkReferences" ItemName="TransitiveFrameworkReferences" />
263+
<Output TaskParameter="FrameworkReferences" ItemName="TransitiveFrameworkReference" />
263264
<Output TaskParameter="NativeLibraries" ItemName="NativeCopyLocalItems" />
264265
<Output TaskParameter="ResourceAssemblies" ItemName="ResourceCopyLocalItems" />
265266
<Output TaskParameter="RuntimeAssemblies" ItemName="RuntimeCopyLocalItems" />

src/Tests/Microsoft.NET.Build.Tests/GivenFrameworkReferences.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -445,7 +445,10 @@ public void TargetingPackVersionCanBeSpecifiedOnFrameworkReference()
445445
resolvedVersions.AppHostPack["AppHost"].Should().Be("3.0.0-apphostversion");
446446
}
447447

448-
[Fact]
448+
// Transitive framework references require NuGet support, which isn't currently
449+
// in the full Framework MSBuild we use in CI, so only run these tests for
450+
// core MSBuild for now
451+
[CoreMSBuildOnlyFact]
449452
public void TransitiveFrameworkReferenceFromProjectReference()
450453
{
451454
var testProject = new TestProject()
@@ -487,7 +490,7 @@ public void TransitiveFrameworkReferenceFromProjectReference()
487490
runtimeFrameworkNames.Should().BeEquivalentTo("Microsoft.AspNetCore.App");
488491
}
489492

490-
[Fact]
493+
[CoreMSBuildOnlyFact]
491494
public void TransitiveFrameworkReferenceFromPackageReference()
492495
{
493496
var referencedPackage = new TestProject()

0 commit comments

Comments
 (0)