Datei: NDODLL/Provider/NDOProviderPathFinder.cs
Last Commit (37b7958)
1 | using System; |
2 | using System.Collections.Generic; |
3 | using System.IO; |
4 | using System.Linq; |
5 | |
6 | namespace NDO.Provider |
7 | { |
8 | ····class NDOProviderPathFinder : IProviderPathFinder |
9 | ····{ |
10 | ········readonly string[] netstandardVersions = {··"2.0", "2.1"}; |
11 | ········readonly string standard = "netstandard"; |
12 | |
13 | ········public IEnumerable<string> GetPaths() |
14 | ········{ |
15 | ············List<string>paths = new List<string>(); |
16 | ············var path = AppDomain.CurrentDomain.BaseDirectory; |
17 | ············paths.Add( path ); |
18 | ············ |
19 | ············string binPath = Path.Combine( path, "bin" ); |
20 | ············if (Directory.Exists( binPath )) |
21 | ················paths.Add(binPath); |
22 | |
23 | ············// This is a hack to determine any loaded provider packages. |
24 | ············var runtimeDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); |
25 | |
26 | ············if (runtimeDir != null && runtimeDir.IndexOf( "Microsoft.NETCore.App" ) > -1) |
27 | ············{ |
28 | ················path = typeof( PersistenceManager ).Assembly.Location; |
29 | ················var pattern = $".nuget{Path.DirectorySeparatorChar}packages"; |
30 | ················int p; |
31 | ················if (( p = path.IndexOf( pattern ) ) > -1) |
32 | ················{ |
33 | ····················p += pattern.Length; |
34 | ····················path = path.Substring( 0, p ); |
35 | ····················var majorVersion = GetType().Assembly.GetName().Version.Major.ToString(); |
36 | |
37 | ····················foreach (var subPath in Directory.GetDirectories( path, "ndo.*" )) |
38 | ····················{ |
39 | ························if (Path.GetFileName( subPath ).Equals( "ndo.dll", StringComparison.OrdinalIgnoreCase )) |
40 | ····························continue; |
41 | ························if (Path.GetFileName( subPath ).Equals( "ndo.jsonformatter", StringComparison.OrdinalIgnoreCase ) ) |
42 | ····························continue; |
43 | #warning We must sort the versions here and take the last one of the same major version |
44 | ························var versionDir = Directory.GetDirectories( subPath ).FirstOrDefault( s => Path.GetFileName( s ).StartsWith( majorVersion) ); |
45 | ························if (versionDir == null) |
46 | ····························continue; |
47 | |
48 | ························foreach (var v in netstandardVersions) |
49 | ························{ |
50 | ····························var libDir = Path.Combine( versionDir, "lib", standard + v ); |
51 | ····························if (!Directory.Exists( libDir )) |
52 | ································continue; |
53 | ····························paths.Add( libDir ); |
54 | ························} |
55 | ····················} |
56 | ················} |
57 | ············} |
58 | |
59 | ············return paths; |
60 | ········} |
61 | ····} |
62 | } |
63 |
New Commit (1b950ea)
1 | using System; |
2 | using System.Collections.Generic; |
3 | using System.IO; |
4 | using System.Linq; |
5 | |
6 | namespace NDO.Provider |
7 | { |
8 | ····class NDOProviderPathFinder : IProviderPathFinder |
9 | ····{ |
10 | ········readonly string[] netstandardVersions = {··"2.0", "2.1"}; |
11 | ········readonly string standard = "netstandard"; |
12 | |
13 | ········public IEnumerable<string> GetPaths() |
14 | ········{ |
15 | ············List<string>paths = new List<string>(); |
16 | ············var path = AppDomain.CurrentDomain.BaseDirectory; |
17 | ············paths.Add( path ); |
18 | ············ |
19 | ············string binPath = Path.Combine( path, "bin" ); |
20 | ············if (Directory.Exists( binPath )) |
21 | ················paths.Add(binPath); |
22 | |
23 | ············// This is a hack to determine any loaded provider packages. |
24 | ············var runtimeDir = System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory(); |
25 | |
26 | ············if (runtimeDir != null && runtimeDir.IndexOf( "Microsoft.NETCore.App" ) > -1) |
27 | ············{ |
28 | ················path = typeof( PersistenceManager ).Assembly.Location; |
29 | ················var pattern = $".nuget{Path.DirectorySeparatorChar}packages"; |
30 | ················int p; |
31 | ················if (( p = path.IndexOf( pattern ) ) > -1) |
32 | ················{ |
33 | ····················p += pattern.Length; |
34 | ····················path = path.Substring( 0, p ); |
35 | ····················var majorVersion = GetType().Assembly.GetName().Version.Major.ToString(); |
36 | |
37 | ····················foreach (var subPath in Directory.GetDirectories( path, "ndo.*" )) |
38 | ····················{ |
39 | ························if (Path.GetFileName( subPath ).Equals( "ndo.dll", StringComparison.OrdinalIgnoreCase )) |
40 | ····························continue; |
41 | ························if (Path.GetFileName( subPath ).Equals( "ndo.jsonformatter", StringComparison.OrdinalIgnoreCase ) ) |
42 | ····························continue; |
43 | //TODO We should sort the versions here and take the last one of the same major version |
44 | ························var versionDir = Directory.GetDirectories( subPath ).FirstOrDefault( s => Path.GetFileName( s ).StartsWith( majorVersion) ); |
45 | ························if (versionDir == null) |
46 | ····························continue; |
47 | |
48 | ························foreach (var v in netstandardVersions) |
49 | ························{ |
50 | ····························var libDir = Path.Combine( versionDir, "lib", standard + v ); |
51 | ····························if (!Directory.Exists( libDir )) |
52 | ································continue; |
53 | ····························paths.Add( libDir ); |
54 | ························} |
55 | ····················} |
56 | ················} |
57 | ············} |
58 | |
59 | ············return paths; |
60 | ········} |
61 | ····} |
62 | } |
63 |