Skip to content

Commit b68e3d4

Browse files
authored
Merge pull request #3195 from dsplaisted/reference-empty-packages
Add reference to empty Microsoft.NETCore.App package
2 parents 7209eb0 + 900de20 commit b68e3d4

File tree

4 files changed

+111
-17
lines changed

4 files changed

+111
-17
lines changed

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

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,9 @@ public class ResolveFrameworkReferences : TaskBase
4848
[Output]
4949
public ITaskItem[] PackagesToDownload { get; set; }
5050

51+
[Output]
52+
public ITaskItem[] LegacyFrameworkPackages { get; set; }
53+
5154
[Output]
5255
public ITaskItem[] RuntimeFrameworks { get; set; }
5356

@@ -80,6 +83,7 @@ protected override void ExecuteCore()
8083
var frameworkReferenceMap = FrameworkReferences.ToDictionary(fr => fr.ItemSpec);
8184

8285
List<ITaskItem> packagesToDownload = new List<ITaskItem>();
86+
List<ITaskItem> legacyFrameworkPackages = new List<ITaskItem>();
8387
List<ITaskItem> runtimeFrameworks = new List<ITaskItem>();
8488
List<ITaskItem> targetingPacks = new List<ITaskItem>();
8589
List<ITaskItem> runtimePacks = new List<ITaskItem>();
@@ -91,6 +95,21 @@ protected override void ExecuteCore()
9195
{
9296
frameworkReferenceMap.TryGetValue(knownFrameworkReference.Name, out ITaskItem frameworkReference);
9397

98+
if (frameworkReference != null)
99+
{
100+
if (!string.IsNullOrEmpty(knownFrameworkReference.LegacyFrameworkPackages))
101+
{
102+
foreach (var packageAndVersion in knownFrameworkReference.LegacyFrameworkPackages.Split(';'))
103+
{
104+
var items = packageAndVersion.Split('/');
105+
TaskItem packageToReference = new TaskItem(items[0]);
106+
packageToReference.SetMetadata(MetadataKeys.Version, items[1]);
107+
108+
legacyFrameworkPackages.Add(packageToReference);
109+
}
110+
}
111+
}
112+
94113
// Get the path of the targeting pack in the targeting pack root (e.g. dotnet/ref)
95114
TaskItem targetingPack = new TaskItem(knownFrameworkReference.Name);
96115
targetingPack.SetMetadata(MetadataKeys.PackageName, knownFrameworkReference.TargetingPackName);
@@ -182,6 +201,11 @@ protected override void ExecuteCore()
182201
PackagesToDownload = packagesToDownload.ToArray();
183202
}
184203

204+
if (legacyFrameworkPackages.Any())
205+
{
206+
LegacyFrameworkPackages = legacyFrameworkPackages.ToArray();
207+
}
208+
185209
if (runtimeFrameworks.Any())
186210
{
187211
RuntimeFrameworks = runtimeFrameworks.ToArray();
@@ -352,6 +376,19 @@ public KnownFrameworkReference(ITaskItem item)
352376

353377
public string RuntimePackRuntimeIdentifiers => _item.GetMetadata("RuntimePackRuntimeIdentifiers");
354378

379+
public string LegacyFrameworkPackages
380+
{
381+
get
382+
{
383+
var packages = _item.GetMetadata("LegacyFrameworkPackages");
384+
if (string.IsNullOrEmpty(packages))
385+
{
386+
packages = _item.GetMetadata("PackagesToReference");
387+
}
388+
return packages;
389+
}
390+
}
391+
355392
public NuGetFramework TargetFramework { get; }
356393
}
357394
}

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

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -181,23 +181,6 @@ Copyright (c) .NET Foundation. All rights reserved.
181181
<PackageReference Condition="'%(PackageReference.Identity)' == 'Microsoft.NETCore.App'">
182182
<Version Condition="'%(PackageReference.Version)' == ''">$(_TargetFrameworkVersionWithoutV)</Version>
183183
</PackageReference>
184-
185-
<!-- Reference the Platforms package in order to supply the RID graph to NuGet.
186-
This can be removed once we do https://github.com/dotnet/cli/issues/10528 or
187-
https://github.com/NuGet/Home/issues/7351
188-
189-
We only do this here when there are PackageReferences. If the only references
190-
are FrameworkReferences, then we do not need to provide this package to NuGet. -->
191-
<PackageReference Include="Microsoft.NETCore.Platforms"
192-
Version="$(BundledNETCorePlatformsPackageVersion)"
193-
IsImplicitlyDefined="true"
194-
Condition="'$(DisableImplicitFrameworkReferences)' != 'true'
195-
and '$(DisableImplicitNETCorePlatformsReference)' != 'true'
196-
and '$(TargetFrameworkIdentifier)' == '.NETCoreApp'
197-
and '$(_TargetFrameworkVersionWithoutV)' != ''
198-
and '$(_TargetFrameworkVersionWithoutV)' >= '3.0'"
199-
PrivateAssets="All"
200-
Publish="true" />
201184
</ItemGroup>
202185
</Target>
203186

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ Copyright (c) .NET Foundation. All rights reserved.
9191
EnableTargetingPackDownload="$(EnableTargetingPackDownload)">
9292

9393
<Output TaskParameter="PackagesToDownload" ItemName="_PackageToDownload" />
94+
<Output TaskParameter="LegacyFrameworkPackages" ItemName="_LegacyFrameworkPackage" />
9495
<Output TaskParameter="RuntimeFrameworks" ItemName="RuntimeFramework" />
9596
<Output TaskParameter="TargetingPacks" ItemName="TargetingPack" />
9697
<Output TaskParameter="RuntimePacks" ItemName="RuntimePack" />
@@ -141,6 +142,16 @@ Copyright (c) .NET Foundation. All rights reserved.
141142
ExcludeAssets="all" />
142143
</ItemGroup>
143144

145+
<!-- Only add these "legacy" package references if there are already existing package references,
146+
as they are only needed in those scenarios (for example supplying the RID graph to
147+
NuGet, or preventing older versions of Framework packages from being used). -->
148+
<ItemGroup Condition="'@(PackageReference)' != '' and '$(DisableImplicitFrameworkReferences)' != 'true'">
149+
<PackageReference Include="@(_LegacyFrameworkPackage)"
150+
IsImplicitlyDefined="true"
151+
PrivateAssets="all"
152+
ExcludeAssets="all" />
153+
</ItemGroup>
154+
144155
</Target>
145156

146157
<UsingTask TaskName="GetPackageDirectory" AssemblyFile="$(MicrosoftNETBuildTasksAssembly)" />

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,5 +616,68 @@ static void Main(string[] args)
616616
.Should()
617617
.Pass();
618618
}
619+
620+
[Fact(Skip = "https://github.com/dotnet/sdk/issues/3044")]
621+
public void ReferenceLegacyContracts()
622+
{
623+
var testProject = new TestProject()
624+
{
625+
Name = "ReferencesLegacyContracts",
626+
TargetFrameworks = "netcoreapp3.0",
627+
IsSdkProject = true,
628+
IsExe = true,
629+
RuntimeIdentifier = EnvironmentInfo.GetCompatibleRid("netcoreapp3.0")
630+
};
631+
632+
// Dependencies on contracts from different 1.x "bands" can cause downgrades when building
633+
// with a RuntimeIdentifier.
634+
testProject.PackageReferences.Add(new TestPackageReference("System.IO.FileSystem", "4.0.1"));
635+
testProject.PackageReferences.Add(new TestPackageReference("System.Reflection", "4.3.0"));
636+
637+
638+
var testAsset = _testAssetsManager.CreateTestProject(testProject, testProject.Name)
639+
.Restore(Log, testProject.Name);
640+
641+
var buildCommand = new BuildCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name));
642+
643+
buildCommand
644+
.Execute()
645+
.Should()
646+
.Pass();
647+
}
648+
649+
[Fact]
650+
public void ItHasNoPackageReferences()
651+
{
652+
var testProject = new TestProject()
653+
{
654+
Name = "NoPackageReferences",
655+
TargetFrameworks = "netcoreapp3.0",
656+
IsSdkProject = true,
657+
IsExe = true
658+
};
659+
660+
var testAsset = _testAssetsManager.CreateTestProject(testProject, testProject.Name)
661+
.Restore(Log, testProject.Name);
662+
663+
string testDirectory = Path.Combine(testAsset.TestRoot, testProject.Name);
664+
665+
var getPackageReferences = new GetValuesCommand(
666+
Log,
667+
testDirectory,
668+
testProject.TargetFrameworks,
669+
"PackageReference",
670+
GetValuesCommand.ValueType.Item);
671+
672+
getPackageReferences.Execute().Should().Pass();
673+
674+
List<string> packageReferences = getPackageReferences.GetValues();
675+
676+
packageReferences
677+
.Should()
678+
.BeEmpty();
679+
680+
681+
}
619682
}
620683
}

0 commit comments

Comments
 (0)