33using System . Runtime . InteropServices ;
44using System . IO ;
55using System . Linq ;
6+ using Semmle . Util ;
67
78namespace Semmle . Extraction . CSharp . Standalone
89{
@@ -20,11 +21,14 @@ public static IEnumerable<string> CoreRuntimes
2021 {
2122 get
2223 {
23- string [ ] dotnetDirs = { "/usr/share/dotnet" , @"C:\Program Files\dotnet" } ;
24+ var dotnetPath = FileUtils . FindProgramOnPath ( Win32 . IsWindows ( ) ? "dotnet.exe" : "dotnet" ) ;
25+ var dotnetDirs = dotnetPath != null
26+ ? new [ ] { dotnetPath }
27+ : new [ ] { "/usr/share/dotnet" , @"C:\Program Files\dotnet" } ;
28+ var coreDirs = dotnetDirs . Select ( d => Path . Combine ( d , "shared" , "Microsoft.NETCore.App" ) ) ;
2429
25- foreach ( var dir in dotnetDirs . Where ( Directory . Exists ) )
26- return Directory . EnumerateDirectories ( Path . Combine ( dir , "shared" , "Microsoft.NETCore.App" ) ) .
27- OrderByDescending ( d => Path . GetFileName ( d ) ) ;
30+ foreach ( var dir in coreDirs . Where ( Directory . Exists ) )
31+ return Directory . EnumerateDirectories ( dir ) . OrderByDescending ( Path . GetFileName ) ;
2832 return Enumerable . Empty < string > ( ) ;
2933 }
3034 }
@@ -37,19 +41,22 @@ public static IEnumerable<string> DesktopRuntimes
3741 {
3842 get
3943 {
40- string [ ] monoDirs = { "/usr/lib/mono" , @"C:\Program Files\Mono\lib\mono" } ;
44+ var monoPath = FileUtils . FindProgramOnPath ( Win32 . IsWindows ( ) ? "mono.exe" : "mono" ) ;
45+ var monoDirs = monoPath != null
46+ ? new [ ] { monoPath }
47+ : new [ ] { "/usr/lib/mono" , @"C:\Program Files\Mono\lib\mono" } ;
4148
4249 if ( Directory . Exists ( @"C:\Windows\Microsoft.NET\Framework64" ) )
4350 {
44- return System . IO . Directory . EnumerateDirectories ( @"C:\Windows\Microsoft.NET\Framework64" , "v*" ) .
45- OrderByDescending ( d => Path . GetFileName ( d ) ) ;
51+ return Directory . EnumerateDirectories ( @"C:\Windows\Microsoft.NET\Framework64" , "v*" ) .
52+ OrderByDescending ( Path . GetFileName ) ;
4653 }
4754
4855 foreach ( var dir in monoDirs . Where ( Directory . Exists ) )
4956 {
50- return System . IO . Directory . EnumerateDirectories ( dir ) .
57+ return Directory . EnumerateDirectories ( dir ) .
5158 Where ( d => Char . IsDigit ( Path . GetFileName ( d ) [ 0 ] ) ) .
52- OrderByDescending ( d => Path . GetFileName ( d ) ) ;
59+ OrderByDescending ( Path . GetFileName ) ;
5360 }
5461
5562 return Enumerable . Empty < string > ( ) ;
0 commit comments