Skip to content

Commit bb764de

Browse files
authored
Merge pull request #3221 from dsplaisted/transitive-framework-references
Add support for transitive framework references
2 parents 2c51ef3 + 4d31c70 commit bb764de

File tree

8 files changed

+227
-30
lines changed

8 files changed

+227
-30
lines changed

eng/build.yml

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,15 @@ jobs:
1919
parameters:
2020
name: ${{ parameters.agentOs }}
2121
enableMicrobuild: true
22-
enablePublishBuildArtifacts: true
2322
enablePublishBuildAssets: true
24-
enablePublishTestResults: true
2523
enableTelemetry: true
2624
helixRepo: dotnet/sdk
2725
pool: ${{ parameters.pool }}
2826
timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
2927
${{ if ne(parameters.strategy, '') }}:
3028
strategy: ${{ parameters.strategy }}
29+
workspace:
30+
clean: all
3131
variables:
3232
- ${{ insert }}: ${{ parameters.variables }}
3333
- _AgentOSName: ${{ parameters.agentOs }}
@@ -151,3 +151,33 @@ jobs:
151151
BuildConfig: $(_BuildConfig)
152152
BlobFeedUrl: $(PB_PublishBlobFeedUrl)
153153
PublishType: $(_PublishType)
154+
155+
- task: PublishTestResults@1
156+
displayName: Publish Test Results
157+
inputs:
158+
testRunner: XUnit
159+
testResultsFiles: 'artifacts/TestResults/$(_BuildConfig)/*.xml'
160+
testRunTitle: '$(_AgentOSName)_$(Agent.JobName)'
161+
platform: '$(BuildPlatform)'
162+
configuration: '$(_BuildConfig)'
163+
condition: not(succeeded())
164+
165+
- task: CopyFiles@2
166+
displayName: Gather Logs
167+
inputs:
168+
SourceFolder: '$(Build.SourcesDirectory)/artifacts'
169+
Contents: |
170+
log/$(_BuildConfig)/**/*
171+
TestResults/$(_BuildConfig)/**/*
172+
TargetFolder: '$(Build.ArtifactStagingDirectory)'
173+
continueOnError: true
174+
condition: not(succeeded())
175+
176+
- task: PublishBuildArtifacts@1
177+
displayName: Publish Logs to VSTS
178+
inputs:
179+
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
180+
ArtifactName: '$(_AgentOSName)_$(Agent.JobName)_$(Build.BuildNumber)'
181+
publishLocation: Container
182+
continueOnError: true
183+
condition: not(succeeded())

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ protected override void ExecuteCore()
8080
NormalizeVersion(kfr.TargetFramework.Version) == normalizedTargetFrameworkVersion)
8181
.ToList();
8282

83-
var frameworkReferenceMap = FrameworkReferences.ToDictionary(fr => fr.ItemSpec);
83+
var frameworkReferenceMap = FrameworkReferences.ToDictionary(fr => fr.ItemSpec, StringComparer.OrdinalIgnoreCase);
8484

8585
List<ITaskItem> packagesToDownload = new List<ITaskItem>();
8686
List<ITaskItem> legacyFrameworkPackages = new List<ITaskItem>();

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

Lines changed: 37 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>
@@ -167,6 +172,9 @@ public sealed class ResolvePackageAssets : TaskBase
167172
[Output]
168173
public ITaskItem[] FrameworkAssemblies { get; private set; }
169174

175+
[Output]
176+
public ITaskItem[] FrameworkReferences { get; private set; }
177+
170178
/// <summary>
171179
/// Full paths to native libraries from packages to run against.
172180
/// </summary>
@@ -262,7 +270,7 @@ public sealed class ResolvePackageAssets : TaskBase
262270
////////////////////////////////////////////////////////////////////////////////////////////////////
263271

264272
private const int CacheFormatSignature = ('P' << 0) | ('K' << 8) | ('G' << 16) | ('A' << 24);
265-
private const int CacheFormatVersion = 7;
273+
private const int CacheFormatVersion = 8;
266274
private static readonly Encoding TextEncoding = Encoding.UTF8;
267275
private const int SettingsHashLength = 256 / 8;
268276
private HashAlgorithm CreateSettingsHash() => SHA256.Create();
@@ -290,6 +298,7 @@ private void ReadItemGroups()
290298
CompileTimeAssemblies = reader.ReadItemGroup();
291299
ContentFilesToPreprocess = reader.ReadItemGroup();
292300
FrameworkAssemblies = reader.ReadItemGroup();
301+
FrameworkReferences = reader.ReadItemGroup();
293302
NativeLibraries = reader.ReadItemGroup();
294303
PackageFolders = reader.ReadItemGroup();
295304
ResourceAssemblies = reader.ReadItemGroup();
@@ -366,6 +375,7 @@ internal byte[] HashSettings()
366375
writer.Write(DisableFrameworkAssemblies);
367376
writer.Write(DisableRuntimeTargets);
368377
writer.Write(DisableTransitiveProjectReferences);
378+
writer.Write(DisableTransitiveFrameworkReferences);
369379
writer.Write(DotNetAppHostExecutableNameWithoutExtension);
370380
writer.Write(EmitAssetsLogMessages);
371381
writer.Write(EnsureRuntimePackageDependencies);
@@ -685,6 +695,7 @@ private void WriteItemGroups()
685695
WriteItemGroup(WriteCompileTimeAssemblies);
686696
WriteItemGroup(WriteContentFilesToPreprocess);
687697
WriteItemGroup(WriteFrameworkAssemblies);
698+
WriteItemGroup(WriteFrameworkReferences);
688699
WriteItemGroup(WriteNativeLibraries);
689700
WriteItemGroup(WritePackageFolders);
690701
WriteItemGroup(WriteResourceAssemblies);
@@ -1103,6 +1114,31 @@ private void WriteTransitiveProjectReferences()
11031114
}
11041115
}
11051116

1117+
private void WriteFrameworkReferences()
1118+
{
1119+
if (_task.DisableTransitiveFrameworkReferences)
1120+
{
1121+
return;
1122+
}
1123+
1124+
HashSet<string> writtenFrameworkReferences = null;
1125+
1126+
foreach (var library in _runtimeTarget.Libraries)
1127+
{
1128+
foreach (var frameworkReference in library.FrameworkReferences)
1129+
{
1130+
if (writtenFrameworkReferences == null)
1131+
{
1132+
writtenFrameworkReferences = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
1133+
}
1134+
if (writtenFrameworkReferences.Add(frameworkReference))
1135+
{
1136+
WriteItem(frameworkReference);
1137+
}
1138+
}
1139+
}
1140+
}
1141+
11061142
private void WriteItems<T>(
11071143
LockFileTarget target,
11081144
Func<LockFileTargetLibrary, IEnumerable<T>> getAssets,

src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.DefaultItems.props

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ Copyright (c) .NET Foundation. All rights reserved.
4646
Publish="true" />
4747
</ItemGroup>
4848
<ItemGroup Condition=" '$(DisableImplicitFrameworkReferences)' != 'true' and '$(TargetFrameworkIdentifier)' == '.NETStandard' And '$(_TargetFrameworkVersionWithoutV)' >= '2.1'">
49-
<FrameworkReference Include="NETStandard.Library" IsImplicitlyDefined="true" Pack="false"/>
49+
<FrameworkReference Include="NETStandard.Library" IsImplicitlyDefined="true" Pack="false" PrivateAssets="All"/>
5050
</ItemGroup>
5151

5252
<ItemGroup Condition=" '$(DisableImplicitFrameworkReferences)' != 'true' and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
@@ -66,6 +66,7 @@ Copyright (c) .NET Foundation. All rights reserved.
6666

6767
<FrameworkReference Include="Microsoft.NETCore.App" IsImplicitlyDefined="true"
6868
Pack="false"
69+
PrivateAssets="All"
6970
Condition="('$(_TargetFrameworkVersionWithoutV)' != '') And ('$(_TargetFrameworkVersionWithoutV)' >= '3.0')"/>
7071

7172
</ItemGroup>

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,15 @@ Copyright (c) .NET Foundation. All rights reserved.
154154

155155
</Target>
156156

157+
<Target Name="AddTransitiveFrameworkReferences" AfterTargets="ResolvePackageAssets"
158+
Condition="'@(TransitiveFrameworkReference)' != ''" >
159+
160+
<ItemGroup>
161+
<FrameworkReference Include="@(TransitiveFrameworkReference)" Exclude="@(FrameworkReference)"/>
162+
</ItemGroup>
163+
164+
</Target>
165+
157166
<UsingTask TaskName="GetPackageDirectory" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
158167
<UsingTask TaskName="ResolveTargetingPackAssets" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />
159168

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

Lines changed: 2 additions & 0 deletions
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,6 +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" />
263+
<Output TaskParameter="FrameworkReferences" ItemName="TransitiveFrameworkReference" />
262264
<Output TaskParameter="NativeLibraries" ItemName="NativeCopyLocalItems" />
263265
<Output TaskParameter="ResourceAssemblies" ItemName="ResourceCopyLocalItems" />
264266
<Output TaskParameter="RuntimeAssemblies" ItemName="RuntimeCopyLocalItems" />

0 commit comments

Comments
 (0)