private AggregateCatalog CreateAggregateCatalog(IEnumerable <string> paths)
        {
            var catalog = new AggregateCatalog();

            foreach (var path in paths)
            {
                _logger.DebugFormat("Found assembly: {0}", path);

                try
                {
                    if (_assemblyUtility.IsManagedAssembly(path))
                    {
                        _logger.DebugFormat("Adding Assembly: {0} to catalog", path);
                        var name     = _assemblyUtility.GetAssemblyName(path);
                        var assembly = _assemblyUtility.Load(name);
                        _addToCatalog(assembly, catalog);
                    }
                    else
                    {
                        _logger.DebugFormat("Skipping Adding Native Assembly {0} to catalog", path);
                    }
                }
                catch (Exception exception)
                {
                    _logger.DebugFormat("Module Loader exception: {0}", exception.Message);
                }
            }
            return(catalog);
        }
        private void GetAssemblyNames(
            string packageDir,
            IEnumerable <IPackageReference> packageReferences,
            ICollection <string> names,
            bool strictLoad)
        {
            foreach (var packageReference in packageReferences)
            {
                var packageObject = _packageContainer.FindPackage(packageDir, packageReference);
                if (packageObject == null)
                {
                    _logger.WarnFormat(
                        CultureInfo.InvariantCulture,
                        "Cannot find: {0} {1}",
                        packageReference.PackageId,
                        packageReference.Version);

                    continue;
                }

                var compatibleDlls = packageObject.GetCompatibleDlls(packageReference.FrameworkName);
                if (compatibleDlls == null)
                {
                    _logger.WarnFormat(
                        CultureInfo.InvariantCulture,
                        "Cannot find compatible binaries for {0} in: {1} {2}",
                        packageReference.FrameworkName,
                        packageReference.PackageId,
                        packageReference.Version);

                    continue;
                }

                foreach (var name in compatibleDlls
                         .Select(packageFile => Path.Combine(packageDir, packageObject.FullName, packageFile))
                         .Where(path => _assemblyUtility.IsManagedAssembly(path))
                         .Concat(packageObject.FrameworkAssemblies)
                         .Where(name => !names.Contains(name)))
                {
                    names.Add(name);
                    _logger.Debug("Found: " + name);
                }

                if (packageObject.Dependencies == null || !packageObject.Dependencies.Any() || !strictLoad)
                {
                    continue;
                }

                var dependencyReferences = packageObject.Dependencies
                                           .Where(dependency =>
                                                  _topLevelPackages.All(topLevelPackage => topLevelPackage.PackageId != dependency.Id))
                                           .Select(dependency =>
                                                   new PackageReference(dependency.Id, dependency.FrameworkName, dependency.Version));

                GetAssemblyNames(packageDir, dependencyReferences, names, true);
            }
        }
Example #3
0
        public IEnumerable <string> GetBinAssemblyPaths(string path)
        {
            var binFolder = Path.Combine(path, _fileSystem.BinFolder);

            if (!_fileSystem.DirectoryExists(binFolder))
            {
                return(Enumerable.Empty <string>());
            }

            var assemblies = _fileSystem.EnumerateBinaries(binFolder, SearchOption.TopDirectoryOnly)
                             .Where(f => _assemblyUtility.IsManagedAssembly(f))
                             .ToList();

            foreach (var assembly in assemblies)
            {
                _logger.DebugFormat("Found assembly in bin folder: {0}", Path.GetFileName(assembly));
            }

            return(assemblies);
        }
Example #4
0
        private IEnumerable <string> GetBinAssemblyPaths(string path)
        {
            var binFolder = Path.Combine(path, _fileSystem.BinFolder);

            if (!_fileSystem.DirectoryExists(binFolder))
            {
                yield break;
            }

            foreach (var assembly in _fileSystem.EnumerateBinaries(binFolder, SearchOption.TopDirectoryOnly)
                     .Where(f => _assemblyUtility.IsManagedAssembly(f)))
            {
                _logger.DebugFormat("Found assembly in bin folder: {0}", Path.GetFileName(assembly));
                yield return(assembly);
            }
        }
Example #5
0
        public virtual void AddAssemblyPaths(IEnumerable <string> assemblyPaths)
        {
            Guard.AgainstNullArgument("assemblyPaths", assemblyPaths);

            foreach (var assemblyPath in assemblyPaths)
            {
                if (_assemblyUtility.IsManagedAssembly(assemblyPath))
                {
                    var info = new AssemblyInfo {
                        Path = assemblyPath
                    };
                    var name = _assemblyUtility.GetAssemblyName(assemblyPath);
                    info.Version = name.Version;

                    AssemblyInfo foundInfo;
                    var          found = _assemblyInfoMap.TryGetValue(name.Name, out foundInfo);

                    if (!found || foundInfo.Version.CompareTo(info.Version) < 0)
                    {
                        // if the assembly being passed is a higher version
                        // and an assembly with it's name has already been resolved
                        if (found && foundInfo.Assembly != null)
                        {
                            _logger.WarnFormat(
                                "Conflict: Assembly {0} with version {1} cannot be added as it has already been resolved",
                                assemblyPath,
                                info.Version);

                            continue;
                        }

                        _logger.DebugFormat("Mapping Assembly {0} to version:{1}", name.Name, name.Version);
                        _assemblyInfoMap[name.Name] = info;
                    }
                }
                else
                {
                    _logger.DebugFormat("Skipping Mapping Native Assembly {0}", assemblyPath);
                }
            }
        }
        private IEnumerable <string> GetBinAssemblies(string path)
        {
            var binFolder = Path.Combine(path, Constants.BinFolder);

            if (!_fileSystem.DirectoryExists(binFolder))
            {
                return(Enumerable.Empty <string>());
            }

            var assemblies = _fileSystem.EnumerateFiles(binFolder, "*.dll")
                             .Union(_fileSystem.EnumerateFiles(binFolder, "*.exe"))
                             .Where(f => _assemblyUtility.IsManagedAssembly(f))
                             .ToList();

            foreach (var assembly in assemblies)
            {
                _logger.DebugFormat("Found assembly in bin folder: {0}", Path.GetFileName(assembly));
            }

            return(assemblies);
        }
Example #7
0
        private IEnumerable <string> GetBinAssemblies(string path, string scriptName)
        {
            var binFolder = Path.Combine(path, Constants.BinFolder);

            if (!_fileSystem.DirectoryExists(binFolder))
            {
                return(Enumerable.Empty <string>());
            }

            var dllName = string.IsNullOrEmpty(scriptName) ? string.Empty : scriptName.Replace(Path.GetExtension(scriptName), ".dll");

            var assemblies = _fileSystem.EnumerateFiles(binFolder, "*.dll")
                             .Union(_fileSystem.EnumerateFiles(binFolder, "*.exe"))
                             .Where(f => _assemblyUtility.IsManagedAssembly(f) && !dllName.Equals(Path.GetFileName(f)))
                             .ToList();

            foreach (var assembly in assemblies)
            {
                _logger.DebugFormat("Found assembly in bin folder: {0}", Path.GetFileName(assembly));
            }

            return(assemblies);
        }
Example #8
0
 // HACK: Filter out assemblies in the GAC by checking if full path is specified.
 private static bool ShouldLoadAssembly(IFileSystem fileSystem, IAssemblyUtility assemblyUtility, string assembly)
 {
     return(fileSystem.IsPathRooted(assembly) && assemblyUtility.IsManagedAssembly(assembly));
 }
Example #9
0
 // HACK: Filter out assemblies in the GAC by checking if full path is specified.
 private static bool ShouldLoadAssembly(IFileSystem fileSystem, IAssemblyUtility assemblyUtility, string assembly)
 {
     return fileSystem.IsPathRooted(assembly) && assemblyUtility.IsManagedAssembly(assembly);
 }
Example #10
0
 public void ShouldReturnFalseWhenThePathDoesNotPointToAManagedAssembly()
 {
     _assemblyUtility.IsManagedAssembly("ScriptCs.Core.Tests.dll.config").ShouldBeFalse();
 }
 public void ShouldReturnTrueWhenThePathIsNotRootedAndDoesNotHaveADllOrExeExtension()
 {
     _assemblyUtility.IsManagedAssembly("System.Data").ShouldBeTrue();
 }