Skip to content

Commit 086390e

Browse files
committed
Full support for aliasing in restore
1 parent a979750 commit 086390e

30 files changed

Lines changed: 192 additions & 153 deletions

File tree

src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,7 @@ private async Task<PackageSpec> GetPackageSpecAsync(ISettings settings)
479479
FrameworkName = targetFramework,
480480
Warn = warn,
481481
PackagesToPrune = packagesToPrune,
482+
TargetAlias = targetFramework.ToString(),
482483
};
483484

484485
// Build up runtime information.

src/NuGet.Clients/NuGet.VisualStudio.Implementation/SolutionExplorer/Models/AssetsFileDependenciesSnapshot.cs

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ private AssetsFileDependenciesSnapshot(LockFile? lockFile, AssetsFileDependencie
9696
continue;
9797
}
9898

99-
string targetAlias = GetTargetAlias(lockFileTarget.Name);
99+
string targetAlias = lockFileTarget.TargetAlias;
100100

101101
previous.DataByTarget.TryGetValue(targetAlias, out AssetsFileTarget? previousTarget);
102102

103-
ImmutableArray<AssetsFileLogMessage> logMessages = ParseLogMessages(lockFile, previousTarget, lockFileTarget.Name);
103+
ImmutableArray<AssetsFileLogMessage> logMessages = ParseLogMessages(lockFile, previousTarget, targetAlias);
104104

105105
dataByTarget.Add(
106106
targetAlias,
@@ -114,34 +114,6 @@ private AssetsFileDependenciesSnapshot(LockFile? lockFile, AssetsFileDependencie
114114
DataByTarget = dataByTarget.ToImmutable();
115115
return;
116116

117-
string GetTargetAlias(string lockFileTargetName)
118-
{
119-
// In some places, the target alias specified in the project file (e.g. "net472") will not
120-
// match the target name used throughout the lock file (e.g. ".NETFramework,Version=v4.7.2").
121-
// The dependencies tree only uses the target alias (what's in the project file) so we need
122-
// to map back to that. See https://github.com/dotnet/project-system/issues/6832.
123-
124-
if (lockFile.PackageSpec.TargetFrameworks.Any(t => t.TargetAlias == lockFileTargetName))
125-
{
126-
// The target name used in the assets file matches the target alias in the project file.
127-
return lockFileTargetName;
128-
}
129-
130-
// The target name used in the assets file does NOT match any target alias in the project.
131-
// Attempt to find the name used in the project.
132-
foreach (TargetFrameworkInformation targetInfo in lockFile.PackageSpec.TargetFrameworks)
133-
{
134-
if (targetInfo.FrameworkName.DotNetFrameworkName == lockFileTargetName)
135-
{
136-
// We found a match, so return the alias.
137-
return targetInfo.TargetAlias;
138-
}
139-
}
140-
141-
// No match was found. Not ideal. Nothing to do but return the original value.
142-
return lockFileTargetName;
143-
}
144-
145117
static ImmutableArray<AssetsFileLogMessage> ParseLogMessages(LockFile lockFile, AssetsFileTarget? previousTarget, string target)
146118
{
147119
if (lockFile.LogMessages.Count == 0)

src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,7 +752,7 @@ internal static List<TargetFrameworkInformation> GetTargetFrameworkInfos(IReadOn
752752
FrameworkReferences = GetFrameworkReferences(msBuildProjectInstance),
753753
PackagesToPrune = prunedReferences,
754754
RuntimeIdentifierGraphPath = msBuildProjectInstance.GetProperty(nameof(TargetFrameworkInformation.RuntimeIdentifierGraphPath)),
755-
TargetAlias = targetAlias,
755+
TargetAlias = string.IsNullOrEmpty(targetAlias) ? targetFramework.ToString() : targetAlias,
756756
Warn = warn
757757
};
758758

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
#nullable enable
22
~NuGet.Commands.IRestoreTargetGraph.TargetAlias.get -> string
3+
~NuGet.Commands.IRestoreTargetGraph.TargetGraphNameWithAlias.get -> string
34
~NuGet.Commands.RestoreTargetGraph.TargetAlias.get -> string
5+
~NuGet.Commands.RestoreTargetGraph.TargetGraphNameWithAlias.get -> string
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
#nullable enable
22
~NuGet.Commands.IRestoreTargetGraph.TargetAlias.get -> string
3+
~NuGet.Commands.IRestoreTargetGraph.TargetGraphNameWithAlias.get -> string
34
~NuGet.Commands.RestoreTargetGraph.TargetAlias.get -> string
5+
~NuGet.Commands.RestoreTargetGraph.TargetGraphNameWithAlias.get -> string

src/NuGet.Core/NuGet.Commands/RestoreCommand/CompatibilityChecker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ internal async Task<CompatibilityCheckResult> CheckAsync(
230230
/// </summary>
231231
private static RestoreLogMessage GetErrorMessage(NuGetLogCode logCode, CompatibilityIssue issue, RestoreTargetGraph graph)
232232
{
233-
return RestoreLogMessage.CreateError(logCode, issue.Format(), issue.Package.Id, graph.TargetGraphName);
233+
return RestoreLogMessage.CreateError(logCode, issue.Format(), issue.Package.Id, graph.TargetGraphNameWithAlias);
234234
}
235235

236236
private static IEnumerable<NuGetFramework> GetPackageFrameworks(

src/NuGet.Core/NuGet.Commands/RestoreCommand/Diagnostics/UnexpectedDependencyMessages.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public static IEnumerable<RestoreLogMessage> GetMissingLowerBounds(IEnumerable<I
7878
.OrderBy(e => e.Child.Name, StringComparer.OrdinalIgnoreCase)
7979
.ThenBy(e => e.Child.Version)
8080
.ThenBy(e => e.Parent.Name, StringComparer.OrdinalIgnoreCase)
81-
.Select(e => GetMissingLowerBoundMessage(e, graph.TargetGraphName)));
81+
.Select(e => GetMissingLowerBoundMessage(e, graph.TargetGraphNameWithAlias)));
8282
}
8383

8484
return messages;
@@ -159,7 +159,7 @@ public static IEnumerable<RestoreLogMessage> GetBumpedUpDependencies(
159159
match.Key.Name,
160160
match.Key.Version);
161161

162-
var graphName = indexedGraph.Graph.TargetGraphName;
162+
var graphName = indexedGraph.Graph.TargetGraphNameWithAlias;
163163

164164
messages.Add(RestoreLogMessage.CreateWarning(NuGetLogCode.NU1601, message, match.Key.Name, graphName));
165165
}
@@ -290,7 +290,7 @@ public static IEnumerable<RestoreLogMessage> GetDependenciesAboveUpperBounds(Lis
290290
child,
291291
actual);
292292

293-
messages.Add(RestoreLogMessage.CreateWarning(NuGetLogCode.NU1608, message, dependencyId, graph.TargetGraphName));
293+
messages.Add(RestoreLogMessage.CreateWarning(NuGetLogCode.NU1608, message, dependencyId, graph.TargetGraphNameWithAlias));
294294
}
295295
}
296296
}

src/NuGet.Core/NuGet.Commands/RestoreCommand/Diagnostics/UnresolvedMessages.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ internal static async Task LogAsync(IEnumerable<IRestoreTargetGraph> graphs, Rem
3333
{
3434
var tasks = graphs.SelectMany(graph => graph.Unresolved.Select(e =>
3535
GetMessageAsync(
36-
graph.TargetGraphName,
36+
graph.TargetGraphNameWithAlias,
3737
e,
3838
context.FilterDependencyProvidersForLibrary(e),
3939
context.PackageSourceMapping.IsEnabled,

src/NuGet.Core/NuGet.Commands/RestoreCommand/IRestoreTargetGraph.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ namespace NuGet.Commands
1212
{
1313
public interface IRestoreTargetGraph
1414
{
15+
string TargetGraphNameWithAlias { get; }
16+
1517
string TargetGraphName { get; }
1618

1719
/// <summary>

src/NuGet.Core/NuGet.Commands/RestoreCommand/LockFileBuilder.cs

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,7 @@ public LockFile CreateLockFile(LockFile previousLockFile,
5050

5151
if (project.RestoreMetadata?.ProjectStyle == ProjectStyle.PackageReference)
5252
{
53-
AddProjectFileDependenciesForPackageReference(project, lockFile, targetGraphs);
54-
}
55-
else
56-
{
57-
AddProjectFileDependenciesForSpec(project, lockFile);
53+
AddProjectFileDependenciesForPackageReference(project, lockFile, targetGraphs.AsList());
5854
}
5955

6056
// Record all libraries used
@@ -164,12 +160,20 @@ public LockFile CreateLockFile(LockFile previousLockFile,
164160
.OrderBy(graph => graph.Framework.ToString(), StringComparer.Ordinal)
165161
.ThenBy(graph => graph.RuntimeIdentifier, StringComparer.Ordinal))
166162
{
167-
var target = new LockFileTarget
168-
{
169-
TargetFramework = targetGraph.Framework,
170-
RuntimeIdentifier = targetGraph.RuntimeIdentifier,
171-
TargetAlias = targetGraph.TargetAlias,
172-
};
163+
var target = lockFile.Version >= 4 ?
164+
new LockFileTarget
165+
{
166+
TargetFramework = targetGraph.Framework,
167+
RuntimeIdentifier = targetGraph.RuntimeIdentifier,
168+
TargetAlias = targetGraph.TargetAlias,
169+
Name = targetGraph.TargetGraphNameWithAlias
170+
} :
171+
new LockFileTarget
172+
{
173+
TargetFramework = targetGraph.Framework,
174+
RuntimeIdentifier = targetGraph.RuntimeIdentifier,
175+
TargetAlias = targetGraph.TargetAlias,
176+
};
173177

174178
var flattenedFlags = IncludeFlagUtils.FlattenDependencyTypes(_includeFlagGraphs, project, targetGraph);
175179

@@ -266,7 +270,7 @@ public LockFile CreateLockFile(LockFile previousLockFile,
266270
NuGetLogCode.NU1701,
267271
message,
268272
library.Name,
269-
targetGraph.TargetGraphName);
273+
targetGraph.TargetGraphNameWithAlias);
270274

271275
_logger.Log(logMessage);
272276

@@ -391,42 +395,25 @@ private static string GetFallbackFrameworkString(NuGetFramework framework)
391395
return string.Join(", ", frameworks);
392396
}
393397

394-
private static void AddProjectFileDependenciesForSpec(PackageSpec project, LockFile lockFile)
398+
private static void AddProjectFileDependenciesForPackageReference(PackageSpec project, LockFile lockFile, List<RestoreTargetGraph> targetGraphs)
395399
{
396-
// Use empty string as the key of dependencies shared by all frameworks
397-
lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup(
398-
string.Empty,
399-
project.Dependencies
400-
.Select(group => group.LibraryRange.ToLockFileDependencyGroupString())
401-
.OrderBy(group => group, StringComparer.Ordinal)));
400+
bool isV4LockFile = lockFile.Version >= 4;
402401

403402
foreach (var frameworkInfo in project.TargetFrameworks
404-
.OrderBy(framework => framework.FrameworkName.ToString(),
405-
StringComparer.Ordinal))
406-
{
407-
lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup(
408-
frameworkInfo.FrameworkName.ToString(),
409-
frameworkInfo.Dependencies
410-
.Select(x => x.LibraryRange.ToLockFileDependencyGroupString())
411-
.OrderBy(dependency => dependency, StringComparer.Ordinal)));
412-
}
413-
}
414-
415-
private static void AddProjectFileDependenciesForPackageReference(PackageSpec project, LockFile lockFile, IEnumerable<RestoreTargetGraph> targetGraphs)
416-
{
417-
// For NETCore put everything under a TFM section
418-
// Projects are included for NETCore
419-
foreach (var frameworkInfo in project.TargetFrameworks
420-
.OrderBy(framework => framework.FrameworkName.ToString(),
403+
.OrderBy(framework => framework.TargetAlias,
421404
StringComparer.Ordinal))
422405
{
423406
var dependencies = new List<LibraryRange>();
424407
dependencies.AddRange(project.Dependencies.Select(e => e.LibraryRange));
425408
dependencies.AddRange(frameworkInfo.Dependencies.Select(e => e.LibraryRange));
426409

427-
var targetGraph = targetGraphs.SingleOrDefault(graph =>
428-
graph.Framework.Equals(frameworkInfo.FrameworkName)
429-
&& string.IsNullOrEmpty(graph.RuntimeIdentifier));
410+
RestoreTargetGraph targetGraph = !string.IsNullOrEmpty(frameworkInfo.TargetAlias) ?
411+
targetGraphs.SingleOrDefault(graph =>
412+
graph.TargetAlias.Equals(frameworkInfo.TargetAlias)
413+
&& string.IsNullOrEmpty(graph.RuntimeIdentifier)) :
414+
targetGraphs.SingleOrDefault(graph =>
415+
graph.Framework.Equals(frameworkInfo.FrameworkName)
416+
&& string.IsNullOrEmpty(graph.RuntimeIdentifier));
430417

431418
var resolvedEntry = targetGraph?
432419
.Flattened
@@ -452,8 +439,9 @@ private static void AddProjectFileDependenciesForPackageReference(PackageSpec pr
452439
}
453440

454441
// Add entry
442+
string framework = isV4LockFile && string.IsNullOrEmpty(frameworkInfo.TargetAlias) ? frameworkInfo.FrameworkName.ToString() : frameworkInfo.TargetAlias;
455443
var dependencyGroup = new ProjectFileDependencyGroup(
456-
frameworkInfo.FrameworkName.ToString(),
444+
framework,
457445
uniqueDependencies.Select(x => x.ToLockFileDependencyGroupString())
458446
.OrderBy(dependency => dependency, StringComparer.Ordinal));
459447

0 commit comments

Comments
 (0)