Beispiel #1
0
        private ComponentResolution ProbeForLibrariesInTargetFrameworkDirectories(DirectoryInfo probingDir, string library)
        {
            var resolution    = new ComponentResolution();
            var candidateLibs = new List <string>();

            foreach (var target in TARGETS)
            {
                var dirs = probingDir.GetDirectories($"{target}*");
                foreach (var dir in dirs)
                {
                    var probeResult = ProbeDirectoryForLibrary(dir, library);
                    if (probeResult.ResolvedComponent)
                    {
                        candidateLibs.Add(probeResult.ResolvedPath);
                    }
                }
            }

            if (candidateLibs.Count == 0)
            {
                resolution.ResolvedComponent = false;
            }
            else
            {
                resolution.ResolvedComponent = true;
                resolution.Candidates        = candidateLibs.ToArray();
                resolution.ResolvedPath      = resolution.Candidates[0];
            }

            return(resolution);
        }
        public override ComponentResolution FindLibrary(string library)
        {
            if (string.IsNullOrWhiteSpace(library))
            {
                throw new ArgumentException("libraryName not set");
            }

            var resolution = new ComponentResolution();

            var(componentDirFound, componentDir) = BaseDirectory.TryNavigateDirectoryDown(Component);

            if (!componentDirFound)
            {
                resolution.ResolvedComponent = false;
                return(resolution);
            }

            return(ProbeDirectoryForLibrary(componentDir, library));
        }
Beispiel #3
0
        private ComponentResolution FindLibraryInComponentBinDirectory(string library)
        {
            var candidateLibraries = new List <string>();

            // Expected location, per probingDir: app/component
            var probingDir = BaseDirectory;

            var(binFound, binDir) = probingDir.TryNavigateDirectoryDown(BIN);

            if (!binFound)
            {
                return(False());
            }

            // Expected location, per probingDir: app/component/bin
            probingDir = binDir;

            DirectoryInfo releaseDir = null;
            DirectoryInfo debugDir   = null;

            // these directories do not have uniform casing, hence foreach
            foreach (var dir in probingDir.GetDirectories())
            {
                var lowerName = dir.Name.ToLowerInvariant();
                if (lowerName == RELEASE)
                {
                    releaseDir = dir;
                }
                else if (lowerName == DEBUG)
                {
                    debugDir = dir;
                }
            }

            // Expected location, per probingDir: app/component/bin/[release | debug]
            if (releaseDir == null && debugDir == null)
            {
                return(False());
            }

            // Probe release and debug directories
            // prefering release
            if (_buildKind == RELEASE && releaseDir != null)
            {
                probingDir = releaseDir;
            }
            else if (_buildKind == DEBUG && debugDir != null)
            {
                probingDir = debugDir;
            }
            else if (releaseDir != null)
            {
                probingDir = releaseDir;
            }
            else if (debugDir != null)
            {
                probingDir = debugDir;
            }
            else
            {
                return(False());
            }

            return(ProbeForLibrariesInTargetFrameworkDirectories(probingDir, library));

            ComponentResolution False()
            {
                var resolution = new ComponentResolution();

                resolution.ResolvedComponent = false;
                return(resolution);
            }
        }