@@ -389,23 +389,30 @@ public override int GetHashCode()
389389 => HashCode . Combine ( TargetFrameworkMoniker , RuntimeFrameworkVersion , CliPath , PackagesPath ) ;
390390 }
391391
392- file static class Helpers
392+ internal static class Helpers
393393 {
394- private static readonly HashSet < string > IgnoredDirectoryNames = new ( StringComparer . Ordinal )
394+ private static readonly HashSet < string > IgnoredDirectoryNames = new ( StringComparer . OrdinalIgnoreCase )
395395 {
396- ".git" ,
397- ".vs" ,
398396 "bin" ,
399397 "obj" ,
400398 } ;
401399
402- private static readonly HashSet < string > ProjectExtensions = new ( StringComparer . Ordinal )
400+ private static readonly HashSet < string > ProjectExtensions = new ( StringComparer . OrdinalIgnoreCase )
403401 {
404402 ".csproj" ,
405403 ".fsproj" ,
406404 ".vbproj"
407405 } ;
408406
407+ private static bool ShouldIgnoreDirectory ( DirectoryInfo directory )
408+ => IgnoredDirectoryNames . Contains ( directory . Name )
409+ || directory . Name . StartsWith ( "." , StringComparison . Ordinal )
410+ #if NETSTANDARD2_0
411+ || directory . Attributes . HasFlag ( FileAttributes . Hidden )
412+ || directory . Attributes . HasFlag ( FileAttributes . ReparsePoint )
413+ #endif
414+ ;
415+
409416 public static FileInfo FindProjectFile ( DirectoryInfo rootDirectory , string projectName )
410417 {
411418 var projectFiles = EnumerateProjectFiles ( rootDirectory , projectName ) ;
@@ -448,13 +455,8 @@ private static IEnumerable<FileInfo> EnumerateProjectFiles(DirectoryInfo rootDir
448455 // 2. Handle sub directories.
449456 foreach ( var dir in subDirectories )
450457 {
451- if ( IgnoredDirectoryNames . Contains ( dir . Name ) )
458+ if ( ShouldIgnoreDirectory ( dir ) )
452459 continue ;
453- #if NETSTANDARD2_0
454- // Ignore reparse point / symlink to avoid infinite loops
455- if ( dir . Attributes . HasFlag ( FileAttributes . ReparsePoint ) )
456- continue ;
457- #endif
458460 stack . Push ( dir ) ;
459461 }
460462 }
@@ -493,7 +495,7 @@ private static IEnumerable<DirectoryInfo> GetSubDirectories(DirectoryInfo curren
493495 {
494496 RecurseSubdirectories = false ,
495497 IgnoreInaccessible = true ,
496- AttributesToSkip = FileAttributes . ReparsePoint
498+ AttributesToSkip = FileAttributes . ReparsePoint | FileAttributes . Hidden
497499 } ;
498500
499501 private static IEnumerable < FileInfo > EnumerateProjectFiles ( DirectoryInfo directory )
0 commit comments