Skip to content

Commit 144446f

Browse files
committed
Add new output DebugSymbolsFiles to ResolvePackageAssets
DebugSymbolsFiles outputs the list of absolute path to symbols files for runtime assemblies which can be either pdb and/or xml. The change: ResolvePackagesAssets was modified to read/write DebugSymbolsFiles from/to the cache file and it was inserted after ContentFilesToProcess because the list of Item groups is ordered alphabetically. Since we need to copy this debug symbols to the output director, the task parameter output for DebugSymbolsFiles is appended to ReferenceCopyLocalPaths. There is some minor code cleanup not related to this bug.
1 parent b0b9714 commit 144446f

File tree

3 files changed

+63
-1
lines changed

3 files changed

+63
-1
lines changed

src/Tasks/Common/MetadataKeys.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,5 +131,12 @@ internal static class MetadataKeys
131131
public const string IsVersion5 = "IsVersion5";
132132
public const string CreateCompositeImage = "CreateCompositeImage";
133133
public const string PerfmapFormatVersion = "PerfmapFormatVersion";
134+
135+
// Debug symbols
136+
public const string RelatedProperty = "related";
137+
public const string XmlExtension = ".xml";
138+
public const string XmlFilePath = "XmlFilePath";
139+
public const string PdbExtension = ".pdb";
140+
public const string PdbFilePath = "PdbFilePath";
134141
}
135142
}

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

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ public sealed class ResolvePackageAssets : TaskBase
156156
[Required]
157157
public string DotNetAppHostExecutableNameWithoutExtension { get; set; }
158158

159+
/// <summary>
160+
/// True indicates we are doing a design-time build. Otherwise we are in a build.
161+
/// </summary>
159162
public bool DesignTimeBuild { get; set; }
160163

161164
/// <summary>
@@ -231,6 +234,15 @@ public sealed class ResolvePackageAssets : TaskBase
231234
[Output]
232235
public ITaskItem[] PackageDependencies { get; private set; }
233236

237+
/// <summary>
238+
/// List of file symbols pdb and xml related to NuGet packages
239+
/// </summary>
240+
/// <remarks>
241+
/// This is the list of files to be copied to the output directory
242+
/// </remarks>
243+
[Output]
244+
public ITaskItem[] DebugSymbolsFiles { get; private set;}
245+
234246
/// <summary>
235247
/// Messages from the assets file.
236248
/// These are logged directly and therefore not returned to the targets (note private here).
@@ -311,6 +323,7 @@ private void ReadItemGroups()
311323
ApphostsForShimRuntimeIdentifiers = reader.ReadItemGroup();
312324
CompileTimeAssemblies = reader.ReadItemGroup();
313325
ContentFilesToPreprocess = reader.ReadItemGroup();
326+
DebugSymbolsFiles = reader.ReadItemGroup();
314327
FrameworkAssemblies = reader.ReadItemGroup();
315328
FrameworkReferences = reader.ReadItemGroup();
316329
NativeLibraries = reader.ReadItemGroup();
@@ -510,7 +523,7 @@ private static BinaryReader CreateReaderFromDisk(ResolvePackageAssets task, byte
510523
BinaryReader reader = null;
511524
try
512525
{
513-
if (File.GetLastWriteTimeUtc(task.ProjectAssetsCacheFile) > File.GetLastWriteTimeUtc(task.ProjectAssetsFile))
526+
if (IsCacheFileUpToDate())
514527
{
515528
reader = OpenCacheFile(task.ProjectAssetsCacheFile, settingsHash);
516529
}
@@ -537,6 +550,8 @@ private static BinaryReader CreateReaderFromDisk(ResolvePackageAssets task, byte
537550
}
538551

539552
return reader;
553+
554+
bool IsCacheFileUpToDate() => File.GetLastWriteTimeUtc(task.ProjectAssetsCacheFile) > File.GetLastWriteTimeUtc(task.ProjectAssetsFile);
540555
}
541556

542557
private static BinaryReader OpenCacheStream(Stream stream, byte[] settingsHash)
@@ -651,6 +666,8 @@ internal sealed class CacheWriter : IDisposable
651666

652667
private const string NetCorePlatformLibrary = "Microsoft.NETCore.App";
653668

669+
private const char RelatedPropertySeparator = ';';
670+
654671
public CacheWriter(ResolvePackageAssets task)
655672
{
656673
_targetFramework = task.TargetFramework;
@@ -776,6 +793,7 @@ private void WriteItemGroups()
776793
WriteItemGroup(WriteApphostsForShimRuntimeIdentifiers);
777794
WriteItemGroup(WriteCompileTimeAssemblies);
778795
WriteItemGroup(WriteContentFilesToPreprocess);
796+
WriteItemGroup(WriteDebugSymbolsFiles);
779797
WriteItemGroup(WriteFrameworkAssemblies);
780798
WriteItemGroup(WriteFrameworkReferences);
781799
WriteItemGroup(WriteNativeLibraries);
@@ -1091,6 +1109,42 @@ private void WriteContentFilesToPreprocess()
10911109
});
10921110
}
10931111

1112+
private void WriteDebugSymbolsFiles()
1113+
{
1114+
foreach (LockFileTargetLibrary library in _runtimeTarget.Libraries)
1115+
{
1116+
if (!library.IsPackage())
1117+
{
1118+
continue;
1119+
}
1120+
1121+
foreach (var asset in library.RuntimeAssemblies)
1122+
{
1123+
if (asset.IsPlaceholderFile() || !asset.Properties.ContainsKey(MetadataKeys.RelatedProperty))
1124+
{
1125+
continue;
1126+
}
1127+
1128+
string itemSpec = _packageResolver.ResolvePackageAssetPath(library, asset.Path);
1129+
1130+
asset.Properties.TryGetValue(MetadataKeys.RelatedProperty, out string relatedExtensions);
1131+
1132+
foreach (string fileExtension in relatedExtensions.Split(RelatedPropertySeparator))
1133+
{
1134+
switch (fileExtension.ToLower())
1135+
{
1136+
case MetadataKeys.PdbExtension:
1137+
WriteItem(Path.ChangeExtension(itemSpec, MetadataKeys.PdbExtension), library);
1138+
break;
1139+
case MetadataKeys.XmlExtension:
1140+
WriteItem(Path.ChangeExtension(itemSpec, MetadataKeys.XmlExtension), library);
1141+
break;
1142+
}
1143+
}
1144+
}
1145+
}
1146+
}
1147+
10941148
private void WriteFrameworkAssemblies()
10951149
{
10961150
if (_task.DisableFrameworkAssemblies)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ Copyright (c) .NET Foundation. All rights reserved.
297297
<Output TaskParameter="Analyzers" ItemName="ResolvedAnalyzers" />
298298
<Output TaskParameter="ApphostsForShimRuntimeIdentifiers" ItemName="_ApphostsForShimRuntimeIdentifiersResolvePackageAssets" />
299299
<Output TaskParameter="ContentFilesToPreprocess" ItemName="_ContentFilesToPreprocess" />
300+
<Output TaskParameter="DebugSymbolsFiles" ItemName="ReferenceCopyLocalPaths" />
300301
<Output TaskParameter="FrameworkAssemblies" ItemName="ResolvedFrameworkAssemblies" />
301302
<Output TaskParameter="FrameworkReferences" ItemName="TransitiveFrameworkReference" />
302303
<Output TaskParameter="NativeLibraries" ItemName="NativeCopyLocalItems" />

0 commit comments

Comments
 (0)