Ejemplo n.º 1
0
        private static string NugetSearchFullPathToExecutableAtRoot(string executableName, string executableRoot)
        {
            if (string.IsNullOrWhiteSpace(executableName))
            {
                throw NullOrWhiteSpaceException(nameof(executableName));
            }

            if (string.IsNullOrWhiteSpace(executableRoot))
            {
                throw NullOrWhiteSpaceException(nameof(executableRoot));
            }

            if (!Directory.Exists(executableRoot))
            {
                throw NotExisting(nameof(executableRoot));
            }

            string runtimesLocation = Path.Combine(executableRoot, "runtimes");

            RuntimeIdentifier[] runtimeIdentifiers = GetRuntimeIdentifiers(runtimesLocation);
            if (runtimeIdentifiers.Length == 0)
            {
                throw NoUsableRuntime(nameof(executableRoot));
            }

            RuntimeIdentifier rid = RuntimeIdentifier.OSCurrent;

            if (Array.IndexOf(runtimeIdentifiers, rid) == -1)
            {
                if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
                {
                    throw NoUsableRuntime(nameof(executableRoot));
                }

                if (!RuntimeIdentifier.TryParse("win-x86", out rid) || Array.IndexOf(runtimeIdentifiers, rid) == -1)
                {
                    throw NoUsableRuntime(nameof(executableRoot));
                }
            }

            string executablePath = Path.Combine(runtimesLocation, rid.ToString(), "native", executableName);

            if (!File.Exists(executablePath))
            {
                throw NoUsableRuntime(nameof(executableRoot));
            }

            return(executablePath);
        }
Ejemplo n.º 2
0
        private static RuntimeIdentifier[] GetRuntimeIdentifiers(string runtimesLocation)
        {
            string[] runtimeFolders       = Directory.GetDirectories(runtimesLocation, "*", SearchOption.TopDirectoryOnly);
            List <RuntimeIdentifier> rids = new List <RuntimeIdentifier>(runtimeFolders.Length);

            for (int i = 0; i < runtimeFolders.Length; i++)
            {
                if (RuntimeIdentifier.TryParse(Path.GetFileName(runtimeFolders[i]), out RuntimeIdentifier runtimeIdentifier))
                {
                    rids.Add(runtimeIdentifier);
                }
            }

            return(rids.ToArray());
        }