Ejemplo n.º 1
0
        public string[][] Resolve(string name, LibrarySearchOptions searchOptions)
        {
            Stack <string[]> buffer = new Stack <string[]>();

            // Environment variables
            if ((searchOptions & LibrarySearchOptions.IncludePathDirectories) != 0)
            {
                foreach (string environmentVariable in _environmentVariables)
                {
                    string[] envPaths = Environment.GetEnvironmentVariable(environmentVariable).Split(Path.PathSeparator);

                    foreach (string envPath in envPaths)
                    {
                        try
                        {
                            if (!Directory.Exists(envPath))
                            {
                                continue;
                            }

                            buffer.Push(Directory.GetFiles(envPath, "*" + name + "*", SearchOption.TopDirectoryOnly));
                        }
                        catch (UnauthorizedAccessException)
                        { }
                    }
                }
            }

            return(buffer.ToArray());
        }
Ejemplo n.º 2
0
        public static string Resolve(string name, LibrarySearchOptions searchOptions = LibrarySearchOptions.Default, string customRoot = "")
        {
            SearchOption directorySearchOption = (searchOptions & LibrarySearchOptions.IncludeSubDirectories) != 0 ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;

            #region Custom root directory
            if ((searchOptions & LibrarySearchOptions.IncludeCustomRootDirectory) != 0)
            {
                string[]             paths     = Directory.GetFiles(customRoot, "*" + name + "*", directorySearchOption);
                LibraryInformation[] libraries = FilterPaths(name, paths);

                if (libraries.Length > 0)
                {
                    foreach (LibraryInformation library in libraries)
                    {
                        Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                    }

                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);
                    return(newest.Path);
                }
            }
            #endregion

            #region Working directory
            if ((searchOptions & LibrarySearchOptions.IncludeTopDirectory) != 0)
            {
                string[]             paths     = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", directorySearchOption);
                LibraryInformation[] libraries = FilterPaths(name, paths);

                if (libraries.Length > 0)
                {
                    foreach (LibraryInformation library in libraries)
                    {
                        Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                    }

                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);
                    return(newest.Path);
                }
            }
            #endregion

            #region OS specific
            string[][] staggeredPaths = _osSpecificResolver.Resolve(name, searchOptions);

            foreach (string[] paths in staggeredPaths)
            {
                LibraryInformation[] libraries = FilterPaths(name, paths);

                if (libraries.Length > 0)
                {
                    foreach (LibraryInformation library in libraries)
                    {
                        Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                    }

                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);
                    return(newest.Path);
                }
            }
            #endregion

            // If all else fails
            return(name);
        }
Ejemplo n.º 3
0
        public static string Locate(string name, LibrarySearchOptions searchOptions = LibrarySearchOptions.Default, string customRoot = "")
        {
            SearchOption directorySearchOption = (searchOptions & LibrarySearchOptions.IncludeSubDirectories) != 0 ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;

            #region Working directory
            if ((searchOptions & LibrarySearchOptions.IncludeTopDirectory) != 0)
            {
                string[]             paths     = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", directorySearchOption);
                LibraryInformation[] libraries = FilterPaths(name, paths);

                foreach (LibraryInformation library in libraries)
                {
                    Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                }

                if (libraries.Length > 0)
                {
                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);


                    return(newest.Path);
                }
            }
            #endregion

            #region System directory
            if ((searchOptions & LibrarySearchOptions.IncludeSystemDirectory) != 0)
            {
                string[]             paths     = Directory.GetFiles(Directory.GetCurrentDirectory(), "*" + name + "*", SearchOption.TopDirectoryOnly);
                LibraryInformation[] libraries = FilterPaths(name, paths);

                foreach (LibraryInformation library in libraries)
                {
                    Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                }

                if (libraries.Length > 0)
                {
                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);


                    return(newest.Path);
                }
            }
            #endregion

            #region PATH directories
            if ((searchOptions & LibrarySearchOptions.IncludePathDirectories) != 0)
            {
                char pathDelimiter = ';';

                if (PlatformInformation.Platform == OSPlatform.Linux || PlatformInformation.Platform == OSPlatform.OSX)
                {
                    pathDelimiter = ':';
                }

                string[] pathPaths = Environment.GetEnvironmentVariable("PATH").Split(pathDelimiter);

                foreach (string pathPath in pathPaths)
                {
                    try
                    {
                        if (!Directory.Exists(pathPath))
                        {
                            continue;
                        }

                        string[]             paths     = Directory.GetFiles(pathPath, "*" + name + "*", SearchOption.TopDirectoryOnly);
                        LibraryInformation[] libraries = FilterPaths(name, paths);

                        foreach (LibraryInformation library in libraries)
                        {
                            Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                        }

                        if (libraries.Length > 0)
                        {
                            LibraryInformation newest = FilterByVersionAndArchitecture(libraries);


                            return(newest.Path);
                        }
                    }
                    catch (UnauthorizedAccessException)
                    {
                    }
                }
            }
            #endregion

            #region Custom root directory
            if ((searchOptions & LibrarySearchOptions.IncludeCustomRootDirectory) != 0)
            {
                string[]             paths     = Directory.GetFiles(customRoot, "*" + name + "*", directorySearchOption);
                LibraryInformation[] libraries = FilterPaths(name, paths);

                foreach (LibraryInformation library in libraries)
                {
                    Debug.Log("Found '" + Path.GetFileName(library.Path) + "'");
                }

                if (libraries.Length > 0)
                {
                    LibraryInformation newest = FilterByVersionAndArchitecture(libraries);


                    return(newest.Path);
                }
            }
            #endregion

            // If all else fails
            return(string.Empty);
        }