@@ -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 )
0 commit comments