@@ -65,6 +65,8 @@ public class FileCopyMap : ISearchExtension
6565 private Dictionary < string , DirectoryData > directories = new Dictionary < string , DirectoryData > ( StringComparer . OrdinalIgnoreCase ) ;
6666 public bool AugmentOtherResults => false ;
6767
68+ public Build Build { get ; set ; }
69+
6870 public event Action < FileData , IList < SearchResult > > FoundSingleFileCopy ;
6971
7072 public void AnalyzeTask ( Task task )
@@ -252,6 +254,7 @@ public bool TryGetResults(NodeQueryMatcher matcher, IList<SearchResult> resultSe
252254 private void TryExplainSingleFileCopy ( Project project , string filePath , IList < SearchResult > resultSet )
253255 {
254256 var fileName = Path . GetFileName ( filePath ) ;
257+ var fileNameWithoutExtension = Path . GetFileNameWithoutExtension ( filePath ) ;
255258
256259 var target = project . FindTarget ( "_GetCopyToOutputDirectoryItemsFromTransitiveProjectReferences" ) ;
257260 if ( target != null )
@@ -296,6 +299,24 @@ private void TryExplainSingleFileCopy(Project project, string filePath, IList<Se
296299 }
297300 }
298301
302+ target = project . FindTarget ( "ResolveProjectReferences" ) ;
303+ if ( target != null )
304+ {
305+ var outputs = target . FindChild < Folder > ( Strings . TargetOutputs ) ;
306+ if ( outputs != null )
307+ {
308+ var outputItem = outputs . FindChild < Item > ( i => Path . GetFileName ( i . Text ) . Equals ( fileName , StringComparison . OrdinalIgnoreCase ) ) ;
309+ if ( outputItem != null )
310+ {
311+ var metadata = outputItem . FindChild < Metadata > ( static m => m . Name == "MSBuildSourceProjectFile" ) ;
312+ if ( metadata != null )
313+ {
314+ resultSet . Add ( new SearchResult ( metadata ) ) ;
315+ }
316+ }
317+ }
318+ }
319+
299320 target = project . FindTarget ( "ResolveAssemblyReferences" ) ;
300321 if ( target != null )
301322 {
@@ -320,6 +341,22 @@ private void TryExplainSingleFileCopy(Project project, string filePath, IList<Se
320341 }
321342 }
322343 }
344+
345+ var results = task . FindChild < Folder > ( Strings . Results ) ;
346+ if ( results != null )
347+ {
348+ foreach ( var dependency in results . Children . OfType < Parameter > ( ) )
349+ {
350+ if ( dependency . Title . ContainsIgnoreCase ( fileNameWithoutExtension ) )
351+ {
352+ var resolvedFilePath = dependency . FindChild < Item > ( i => i . Title . ContainsIgnoreCase ( filePath ) ) ;
353+ if ( resolvedFilePath != null )
354+ {
355+ resultSet . Add ( new SearchResult ( resolvedFilePath ) ) ;
356+ }
357+ }
358+ }
359+ }
323360 }
324361 }
325362
@@ -452,6 +489,43 @@ private void TryGetFiles(string text, IList<SearchResult> resultSet, NodeQueryMa
452489 }
453490 }
454491
492+ if ( results . Count == 0 && ! string . IsNullOrWhiteSpace ( text ) )
493+ {
494+ var rars = Build . FindChildrenRecursive < ResolveAssemblyReferenceTask > ( ) ;
495+ foreach ( var rar in rars )
496+ {
497+ var project = rar . GetNearestParent < Project > ( ) ;
498+ if ( project != null && matcher . ProjectMatchers . All ( p => p . IsMatch ( project . Name , project . SourceFilePath ) != null ) )
499+ {
500+ var resultsFolder = rar . FindChild < Folder > ( Strings . Results ) ;
501+ if ( resultsFolder != null )
502+ {
503+ foreach ( var dependency in resultsFolder . Children . OfType < Parameter > ( ) )
504+ {
505+ bool found = false ;
506+ foreach ( var item in dependency . Children . OfType < Item > ( ) )
507+ {
508+ if ( item . Title . ContainsIgnoreCase ( text ) )
509+ {
510+ resultSet . Add ( new SearchResult ( item ) ) ;
511+ found = true ;
512+ }
513+ }
514+
515+ if ( found )
516+ {
517+ var copyLocal = dependency . FindChild < Item > ( i => i . Title . ContainsIgnoreCase ( "CopyLocal" ) ) ;
518+ if ( copyLocal != null )
519+ {
520+ resultSet . Add ( new SearchResult ( copyLocal ) ) ;
521+ }
522+ }
523+ }
524+ }
525+ }
526+ }
527+ }
528+
455529 results . Sort ( ( l , r ) => l . Node . Title . CompareTo ( r . Node . Title ) ) ;
456530
457531 foreach ( var result in results )
0 commit comments