Skip to content

Commit 1a58184

Browse files
authored
Merge pull request #28212 from dotnet/revert-pr28057
Revert pr28057
2 parents e8a146d + 5cd5226 commit 1a58184

File tree

4 files changed

+79
-208
lines changed

4 files changed

+79
-208
lines changed

src/Tasks/Microsoft.NET.Build.Tasks.UnitTests/GivenAResolvePackageDependenciesTask.cs

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class GivenAResolvePackageDependenciesTask
2121

2222
[Theory]
2323
[MemberData(nameof(ItemCounts))]
24-
public void ItRaisesLockFileToMSBuildItems(string projectName, int[] counts)
24+
public void ItRaisesLockFileToMSBuildItems(string projectName, int[] counts, bool emitLegacyAssetsFileItems)
2525
{
26-
var task = GetExecutedTaskFromPrefix(projectName, out _);
26+
var task = GetExecutedTaskFromPrefix(projectName, out _, emitLegacyAssetsFileItems);
2727

2828
task.PackageDefinitions .Count().Should().Be(counts[0]);
2929
task.FileDefinitions .Count().Should().Be(counts[1]);
@@ -40,16 +40,36 @@ public static IEnumerable<object[]> ItemCounts
4040
{
4141
new object[] {
4242
"dotnet.new",
43-
new int[] { 110, 2536, 1, 845, 75 },
43+
new int[] { 110, 2536, 1, 846, 73 },
44+
true
45+
},
46+
new object[] {
47+
"dotnet.new",
48+
new int[] { 110, 0, 0, 846, 0 },
49+
false
50+
},
51+
new object[] {
52+
"simple.dependencies",
53+
new int[] { 113, 2613, 1, 878, 94 },
54+
true
4455
},
4556
new object[] {
4657
"simple.dependencies",
47-
new int[] { 113, 2613, 1, 877, 96 },
58+
new int[] { 113, 0, 0, 878, 0 },
59+
false
4860
},
4961
};
5062
}
5163
}
5264

65+
[Fact]
66+
public void ItOmitsLegacyItemsByDefault()
67+
{
68+
var task = new ResolvePackageDependencies();
69+
70+
task.EmitLegacyAssetsFileItems.Should().Be(false);
71+
}
72+
5373
[Theory]
5474
[InlineData("dotnet.new")]
5575
[InlineData("simple.dependencies")]
@@ -564,7 +584,8 @@ public void ItAddsAnalyzerMetadataAndFileDependencies()
564584
{
565585
ProjectAssetsFile = lockFile.Path,
566586
ProjectPath = null,
567-
ProjectLanguage = projectLanguage // set language
587+
ProjectLanguage = projectLanguage, // set language
588+
EmitLegacyAssetsFileItems = true
568589
};
569590
task.Execute().Should().BeTrue();
570591

@@ -648,7 +669,8 @@ public void ItFiltersAnalyzersByProjectLanguage()
648669
{
649670
ProjectAssetsFile = lockFile.Path,
650671
ProjectPath = null,
651-
ProjectLanguage = projectLanguage // set language
672+
ProjectLanguage = projectLanguage, // set language
673+
EmitLegacyAssetsFileItems = true
652674
};
653675
task.Execute().Should().BeTrue();
654676

@@ -817,19 +839,19 @@ public void ItDoesNotThrowOnCrossTargetingWithTargetPlatforms()
817839
GetExecutedTaskFromContents(lockFileContent, out _); // Task should not fail on matching framework names
818840
}
819841

820-
private static ResolvePackageDependencies GetExecutedTaskFromPrefix(string lockFilePrefix, out LockFile lockFile, string target = null)
842+
private static ResolvePackageDependencies GetExecutedTaskFromPrefix(string lockFilePrefix, out LockFile lockFile, bool emitLegacyAssetsFileItems = true, string target = null)
821843
{
822844
lockFile = TestLockFiles.GetLockFile(lockFilePrefix);
823-
return GetExecutedTask(lockFile, target);
845+
return GetExecutedTask(lockFile, emitLegacyAssetsFileItems, target);
824846
}
825847

826-
private static ResolvePackageDependencies GetExecutedTaskFromContents(string lockFileContents, out LockFile lockFile, string target = null)
848+
private static ResolvePackageDependencies GetExecutedTaskFromContents(string lockFileContents, out LockFile lockFile, bool emitLegacyAssetsFileItems = true, string target = null)
827849
{
828850
lockFile = TestLockFiles.CreateLockFile(lockFileContents);
829-
return GetExecutedTask(lockFile, target);
851+
return GetExecutedTask(lockFile, emitLegacyAssetsFileItems, target);
830852
}
831853

832-
private static ResolvePackageDependencies GetExecutedTask(LockFile lockFile, string target)
854+
private static ResolvePackageDependencies GetExecutedTask(LockFile lockFile, bool emitLegacyAssetsFileItems, string target)
833855
{
834856
var resolver = new MockPackageResolver(_packageRoot);
835857

@@ -838,6 +860,7 @@ private static ResolvePackageDependencies GetExecutedTask(LockFile lockFile, str
838860
ProjectAssetsFile = lockFile.Path,
839861
ProjectPath = _projectPath,
840862
ProjectLanguage = null,
863+
EmitLegacyAssetsFileItems = emitLegacyAssetsFileItems,
841864
TargetFramework = target
842865
};
843866

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

Lines changed: 6 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
using Microsoft.Build.Framework;
1313
using Microsoft.Build.Utilities;
1414
using NuGet.Common;
15-
using NuGet.Frameworks;
16-
using NuGet.Packaging;
1715
using NuGet.ProjectModel;
1816
using NuGet.Versioning;
1917

@@ -29,8 +27,6 @@ namespace Microsoft.NET.Build.Tasks
2927
/// </summary>
3028
public sealed class ResolvePackageAssets : TaskBase
3129
{
32-
#region Input Items
33-
3430
/// <summary>
3531
/// Path to assets.json.
3632
/// </summary>
@@ -164,10 +160,6 @@ public sealed class ResolvePackageAssets : TaskBase
164160
/// </summary>
165161
public bool DesignTimeBuild { get; set; }
166162

167-
#endregion
168-
169-
#region Output Items
170-
171163
/// <summary>
172164
/// Full paths to assemblies from packages to pass to compiler as analyzers.
173165
/// </summary>
@@ -238,22 +230,9 @@ public sealed class ResolvePackageAssets : TaskBase
238230
[Output]
239231
public ITaskItem[] ApphostsForShimRuntimeIdentifiers { get; private set; }
240232

241-
/// <summary>
242-
/// All the libraries/packages in the lock file.
243-
/// </summary>
244-
[Output]
245-
public ITaskItem[] PackageDefinitions { get; private set; }
246-
247233
[Output]
248234
public ITaskItem[] PackageDependencies { get; private set; }
249235

250-
/// <summary>
251-
/// All the dependencies between packages. Each package has metadata 'ParentPackage'
252-
/// to refer to the package that depends on it. For top level packages this value is blank.
253-
/// </summary>
254-
[Output]
255-
public ITaskItem[] PackageDependenciesBetweenPackages { get; private set; }
256-
257236
/// <summary>
258237
/// List of symbol files (.pdb) related to NuGet packages.
259238
/// </summary>
@@ -272,8 +251,6 @@ public sealed class ResolvePackageAssets : TaskBase
272251
[Output]
273252
public ITaskItem[] ReferenceDocumentationFiles { get; private set; }
274253

275-
#endregion
276-
277254
/// <summary>
278255
/// Messages from the assets file.
279256
/// These are logged directly and therefore not returned to the targets (note private here).
@@ -358,9 +335,7 @@ private void ReadItemGroups()
358335
FrameworkAssemblies = reader.ReadItemGroup();
359336
FrameworkReferences = reader.ReadItemGroup();
360337
NativeLibraries = reader.ReadItemGroup();
361-
PackageDefinitions = reader.ReadItemGroup();
362338
PackageDependencies = reader.ReadItemGroup();
363-
PackageDependenciesBetweenPackages = reader.ReadItemGroup();
364339
PackageFolders = reader.ReadItemGroup();
365340
ReferenceDocumentationFiles = reader.ReadItemGroup();
366341
ResourceAssemblies = reader.ReadItemGroup();
@@ -679,8 +654,6 @@ internal sealed class CacheWriter : IDisposable
679654
{
680655
private const int InitialStringTableCapacity = 32;
681656

682-
private HashSet<string> _projectFileDependencies;
683-
private Dictionary<string, string> _targetNameToAliasMap;
684657
private ResolvePackageAssets _task;
685658
private BinaryWriter _writer;
686659
private LockFile _lockFile;
@@ -711,8 +684,7 @@ public CacheWriter(ResolvePackageAssets task)
711684
_task = task;
712685
_lockFile = new LockFileCache(task).GetLockFile(task.ProjectAssetsFile);
713686
_packageResolver = NuGetPackageResolver.CreateResolver(_lockFile);
714-
_targetNameToAliasMap = CreateTargetNameToAlisMap();
715-
ReadProjectFileDependencies(string.IsNullOrEmpty(_task.TargetFramework) || !_targetNameToAliasMap.ContainsKey(_task.TargetFramework) ? null : _targetNameToAliasMap[_task.TargetFramework]);
687+
716688

717689
// If we are doing a design-time build, we do not want to fail the build if we can't find the
718690
// target framework and/or runtime identifier in the assets file. This is because the design-time
@@ -754,26 +726,8 @@ public CacheWriter(ResolvePackageAssets task)
754726
{
755727
ComputePackageExclusions();
756728
}
757-
758-
void ReadProjectFileDependencies(string frameworkAlias)
759-
{
760-
_projectFileDependencies = _lockFile.GetProjectFileDependencySet(frameworkAlias);
761-
}
762729
}
763730

764-
private Dictionary<string, string> CreateTargetNameToAlisMap() => _lockFile.Targets.ToDictionary(t => t.Name, t =>
765-
{
766-
var alias = _lockFile.GetLockFileTargetAlias(t);
767-
if (string.IsNullOrEmpty(t.RuntimeIdentifier))
768-
{
769-
return alias;
770-
}
771-
else
772-
{
773-
return alias + "/" + t.RuntimeIdentifier;
774-
}
775-
});
776-
777731
public void WriteToCacheFile()
778732
{
779733
Directory.CreateDirectory(Path.GetDirectoryName(_task.ProjectAssetsCacheFile));
@@ -852,9 +806,7 @@ private void WriteItemGroups()
852806
WriteItemGroup(WriteFrameworkAssemblies);
853807
WriteItemGroup(WriteFrameworkReferences);
854808
WriteItemGroup(WriteNativeLibraries);
855-
WriteItemGroup(WritePackageDefinitions);
856809
WriteItemGroup(WritePackageDependencies);
857-
WriteItemGroup(WritePackageDependenciesBetweenPackages);
858810
WriteItemGroup(WritePackageFolders);
859811
WriteItemGroup(WriteReferenceDocumentationFiles);
860812
WriteItemGroup(WriteResourceAssemblies);
@@ -1205,13 +1157,17 @@ private void WriteDebugItems(
12051157

12061158
foreach (string fileExtension in relatedExtensions.Split(RelatedPropertySeparator))
12071159
{
1208-
if (fileExtension.ToLowerInvariant() == extension)
1160+
if (fileExtension.ToLower() == extension)
12091161
{
12101162
string xmlFilePath = Path.ChangeExtension(itemSpec, fileExtension);
12111163
if (File.Exists(xmlFilePath))
12121164
{
12131165
WriteItem(xmlFilePath, library);
12141166
}
1167+
else
1168+
{
1169+
_task.Log.LogWarning(Strings.AssetsFileNotFound, xmlFilePath);
1170+
}
12151171
}
12161172
}
12171173
}
@@ -1438,72 +1394,6 @@ private void WritePackageFolders()
14381394
}
14391395
}
14401396

1441-
private void WritePackageDefinitions()
1442-
{
1443-
// Get library and file definitions
1444-
foreach (var package in _lockFile.Libraries)
1445-
{
1446-
var packageName = package.Name;
1447-
var packageVersion = package.Version.ToNormalizedString();
1448-
string packageId = $"{packageName}/{packageVersion}";
1449-
1450-
WriteItem(packageId);
1451-
WriteMetadata(MetadataKeys.Name, packageName);
1452-
WriteMetadata(MetadataKeys.Type, package.Type);
1453-
WriteMetadata(MetadataKeys.Version, packageVersion);
1454-
WriteMetadata(MetadataKeys.Path, package.Path ?? string.Empty);
1455-
1456-
string resolvedPackagePath = ResolvePackagePath(package);
1457-
WriteMetadata(MetadataKeys.ResolvedPath, resolvedPackagePath ?? string.Empty);
1458-
1459-
WriteMetadata(MetadataKeys.DiagnosticLevel, GetPackageDiagnosticLevel(package));
1460-
}
1461-
1462-
string ResolvePackagePath(LockFileLibrary package)
1463-
{
1464-
if (package.IsProject())
1465-
{
1466-
var relativeMSBuildProjectPath = package.MSBuildProject;
1467-
1468-
if (string.IsNullOrEmpty(relativeMSBuildProjectPath))
1469-
{
1470-
throw new BuildErrorException(Strings.ProjectAssetsConsumedWithoutMSBuildProjectPath, package.Name, _task.ProjectAssetsFile);
1471-
}
1472-
1473-
return GetAbsolutePathFromProjectRelativePath(relativeMSBuildProjectPath);
1474-
}
1475-
else
1476-
{
1477-
return _packageResolver.GetPackageDirectory(package.Name, package.Version);
1478-
}
1479-
}
1480-
1481-
string GetAbsolutePathFromProjectRelativePath(string path)
1482-
{
1483-
return Path.GetFullPath(Path.Combine(Path.GetDirectoryName(_task.ProjectPath), path));
1484-
}
1485-
1486-
string GetPackageDiagnosticLevel(LockFileLibrary package)
1487-
{
1488-
string target = _task.TargetFramework ?? "";
1489-
1490-
var messages = _lockFile.LogMessages.Where(log => log.LibraryId == package.Name && log.TargetGraphs
1491-
.Select(tg =>
1492-
{
1493-
var parsedTargetGraph = NuGetFramework.Parse(tg);
1494-
var alias = _lockFile.PackageSpec.TargetFrameworks.FirstOrDefault(tf => tf.FrameworkName == parsedTargetGraph)?.TargetAlias;
1495-
return alias ?? tg;
1496-
}).Contains(target));
1497-
1498-
if (!messages.Any())
1499-
{
1500-
return string.Empty;
1501-
}
1502-
1503-
return messages.Max(log => log.Level).ToString();
1504-
}
1505-
}
1506-
15071397
private void WritePackageDependencies()
15081398
{
15091399
foreach (var library in _runtimeTarget.Libraries)
@@ -1515,71 +1405,6 @@ private void WritePackageDependencies()
15151405
}
15161406
}
15171407

1518-
private void WritePackageDependenciesBetweenPackages()
1519-
{
1520-
foreach(var target in _lockFile.Targets)
1521-
{
1522-
GetPackageDependencies(target);
1523-
}
1524-
1525-
void GetPackageDependencies(LockFileTarget target)
1526-
{
1527-
var resolvedPackageVersions = target.Libraries
1528-
.ToDictionary(pkg => pkg.Name, pkg => pkg.Version.ToNormalizedString(), StringComparer.OrdinalIgnoreCase);
1529-
1530-
string frameworkAlias = _targetNameToAliasMap[target.Name];
1531-
1532-
var transitiveProjectRefs = new HashSet<string>(
1533-
target.Libraries
1534-
.Where(lib => lib.IsTransitiveProjectReference(_lockFile, ref _projectFileDependencies, frameworkAlias))
1535-
.Select(pkg => pkg.Name),
1536-
StringComparer.OrdinalIgnoreCase);
1537-
1538-
foreach (var package in target.Libraries)
1539-
{
1540-
string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}";
1541-
1542-
if (_projectFileDependencies.Contains(package.Name))
1543-
{
1544-
WriteItem(packageId);
1545-
WriteMetadata(MetadataKeys.ParentTarget, frameworkAlias); // Foreign Key
1546-
WriteMetadata(MetadataKeys.ParentPackage, string.Empty); // Foreign Key
1547-
}
1548-
1549-
// get sub package dependencies
1550-
GetDependencies(package, target.Name, resolvedPackageVersions, transitiveProjectRefs);
1551-
}
1552-
}
1553-
1554-
void GetDependencies(
1555-
LockFileTargetLibrary package,
1556-
string targetName,
1557-
Dictionary<string, string> resolvedPackageVersions,
1558-
HashSet<string> transitiveProjectRefs)
1559-
{
1560-
string packageId = $"{package.Name}/{package.Version.ToNormalizedString()}";
1561-
string frameworkAlias = _targetNameToAliasMap[targetName];
1562-
foreach (var deps in package.Dependencies)
1563-
{
1564-
if (!resolvedPackageVersions.TryGetValue(deps.Id, out string version))
1565-
{
1566-
continue;
1567-
}
1568-
1569-
string depsName = $"{deps.Id}/{version}";
1570-
1571-
WriteItem(depsName);
1572-
WriteMetadata(MetadataKeys.ParentTarget, frameworkAlias); // Foreign Key
1573-
WriteMetadata(MetadataKeys.ParentPackage, packageId); // Foreign Key
1574-
1575-
if (transitiveProjectRefs.Contains(deps.Id))
1576-
{
1577-
WriteMetadata(MetadataKeys.TransitiveProjectReference, "true");
1578-
}
1579-
}
1580-
}
1581-
}
1582-
15831408
private void WriteResourceAssemblies()
15841409
{
15851410
WriteItems(

0 commit comments

Comments
 (0)