Example #1
0
        // Add all reference items to the assembly list
        private void AddReferencedAssemblies(PackageIdentity packageIdentify, DirectoryPath installedPath, PackageArchiveReader archiveReader)
        {
            List <FrameworkSpecificGroup> referenceItems = archiveReader.GetReferenceItems().ToList();
            FrameworkSpecificGroup        referenceGroup = GetMostCompatibleGroup(_currentFramework, referenceItems);

            if (referenceGroup != null)
            {
                Trace.Verbose($"Found compatible reference group {referenceGroup.TargetFramework.DotNetFrameworkName} for package {packageIdentify}");
                foreach (FilePath itemPath in referenceGroup.Items
                         .Select(x => new FilePath(x))
                         .Where(x => x.FileName.Extension == ".dll" || x.FileName.Extension == ".exe"))
                {
                    FilePath assemblyPath = installedPath.CombineFile(itemPath);
                    _assemblyLoader.Add(assemblyPath.FullPath);
                    Trace.Verbose($"Added NuGet reference {assemblyPath} from package {packageIdentify} for loading");
                }
            }
            else if (referenceItems.Count == 0)
            {
                // Only show a verbose message if there were no reference items (I.e., it's probably a content-only package or a metapackage and not a mismatch)
                Trace.Verbose($"Could not find any reference items in package {packageIdentify}");
            }
            else
            {
                Trace.Verbose($"Could not find compatible reference group for package {packageIdentify} (found {string.Join(",", referenceItems.Select(x => x.TargetFramework.DotNetFrameworkName))})");
            }
        }
Example #2
0
        public void RejectedDependenciesToNotCarryConstraints()
        {
            // a1->b1-*d1->e2->x2
            // a1->c1->d2
            // a1->c1->e1->x1
            // * b1->d1 lower than c1->d2 so d1->e2->x2 are n/a

            var testLoader = new TestAssemblyLoader()
                             .Package("a", "1.0", that => that.Needs("b", "1.0").Needs("c", "1.0"))
                             .Package("b", "1.0", that => that.Needs("d", "1.0"))
                             .Package("c", "1.0", that => that.Needs("d", "2.0").Needs("e", "1.0"))
                             .Package("d", "1.0", that => that.Needs("e", "2.0"))
                             .Package("d", "2.0")
                             .Package("e", "1.0", that => that.Needs("x", "1.0"))
                             .Package("e", "2.0", that => that.Needs("x", "2.0"))
                             .Package("x", "1.0")
                             .Package("x", "2.0");

            var loader = new AssemblyLoader();

            loader.Add(testLoader);
            loader.Walk("a", new SemanticVersion("1.0"), VersionUtility.ParseFrameworkName("net45"));

            // the d1->e2->x2 line has no effect because d2 has no dependencies,

            testLoader.Dependencies.ShouldBe(Dependencies(that => that
                                                          .Needs("a", "1.0")
                                                          .Needs("b", "1.0")
                                                          .Needs("c", "1.0")
                                                          .Needs("d", "2.0")
                                                          .Needs("e", "1.0")
                                                          .Needs("x", "1.0")
                                                          ));
        }
Example #3
0
        private static AssemblyLoader CreateLoader(string projectDir)
        {
            var globalAssemblyCache = new DefaultGlobalAssemblyCache();

            var    loader           = new AssemblyLoader();
            string rootDirectory    = ResolveRootDirectory(projectDir);
            var    resolver         = new FrameworkReferenceResolver(globalAssemblyCache);
            var    resourceProvider = new ResxResourceProvider();
            var    roslynLoader     = new RoslynAssemblyLoader(rootDirectory, NoopWatcher.Instance, resolver, globalAssemblyCache, loader, resourceProvider);

            loader.Add(roslynLoader);
#if DESKTOP
            loader.Add(new MSBuildProjectAssemblyLoader(rootDirectory, NoopWatcher.Instance));
#endif
            loader.Add(new NuGetAssemblyLoader(projectDir));

            return(loader);
        }
Example #4
0
        public void MissingDependenciesAreIgnored()
        {
            var testLoader = new TestAssemblyLoader()
                             .Package("a", "1.0", that => that.Needs("x", "1.0"));

            var loader = new AssemblyLoader();

            loader.Add(testLoader);
            loader.Walk("a", new SemanticVersion("1.0"), VersionUtility.ParseFrameworkName("net45"));

            testLoader.Dependencies.ShouldBe(Dependencies(that => that
                                                          .Needs("a", "1.0")));
        }
Example #5
0
        private void Initialize(bool watchFiles)
        {
            _loader = new AssemblyLoader();
            string rootDirectory = ResolveRootDirectory(_projectDir);

#if DESKTOP // CORECLR_TODO: FileSystemWatcher
            if (watchFiles)
            {
                _watcher            = new FileWatcher(rootDirectory);
                _watcher.OnChanged += OnWatcherChanged;
            }
            else
#endif
            {
                _watcher = NoopWatcher.Instance;
            }

            var globalAssemblyCache = new DefaultGlobalAssemblyCache();

            var cachedLoader = new CachedCompilationLoader(rootDirectory);
            _loader.Add(cachedLoader);
            var resolver         = new FrameworkReferenceResolver(globalAssemblyCache);
            var resourceProvider = new ResxResourceProvider();
            var roslynLoader     = new RoslynAssemblyLoader(rootDirectory, _watcher, resolver, globalAssemblyCache, _loader, resourceProvider);
            _loader.Add(roslynLoader);
#if DESKTOP // CORECLR_TODO: Process
            _loader.Add(new MSBuildProjectAssemblyLoader(rootDirectory, _watcher));
#endif
            _loader.Add(new NuGetAssemblyLoader(_projectDir));

            _hostServices[HostServices.ResolveAssemblyReference] = new Func <string, object>(name =>
            {
                var an = new AssemblyName(name);

                return(_loader.ResolveReference(an.Name));
            });
        }
Example #6
0
        // Add all reference items to the assembly list
        private void AddReferencedAssemblies(DirectoryPath installedPath, PackageArchiveReader archiveReader)
        {
            FrameworkSpecificGroup referenceGroup = GetMostCompatibleGroup(_currentFramework, archiveReader.GetReferenceItems().ToList());

            if (referenceGroup != null)
            {
                foreach (FilePath itemPath in referenceGroup.Items
                         .Select(x => new FilePath(x))
                         .Where(x => x.FileName.Extension == ".dll" || x.FileName.Extension == ".exe"))
                {
                    FilePath assemblyPath = installedPath.CombineFile(itemPath);
                    _assemblyLoader.Add(assemblyPath.FullPath);
                    Trace.Verbose($"Added NuGet reference {assemblyPath} for loading");
                }
            }
        }
Example #7
0
        public void SimpleGraphCanBeWalked()
        {
            var testLoader = new TestAssemblyLoader()
                             .Package("a", "1.0", that => that.Needs("b", "1.0").Needs("c", "1.0"))
                             .Package("b", "1.0")
                             .Package("c", "1.0");

            var loader = new AssemblyLoader();

            loader.Add(testLoader);
            loader.Walk("a", new SemanticVersion("1.0"), VersionUtility.ParseFrameworkName("net45"));

            testLoader.Dependencies.ShouldBe(Dependencies(that => that
                                                          .Needs("a", "1.0")
                                                          .Needs("b", "1.0")
                                                          .Needs("c", "1.0")));
        }
Example #8
0
        public void HigherDisputedDependencyWins()
        {
            var testLoader = new TestAssemblyLoader()
                             .Package("a", "1.0", that => that.Needs("b", "1.0").Needs("c", "1.0"))
                             .Package("b", "1.0", that => that.Needs("x", "1.0"))
                             .Package("c", "1.0", that => that.Needs("x", "2.0"))
                             .Package("x", "1.0")
                             .Package("x", "2.0");

            var loader = new AssemblyLoader();

            loader.Add(testLoader);
            loader.Walk("a", new SemanticVersion("1.0"), VersionUtility.ParseFrameworkName("net45"));

            testLoader.Dependencies.ShouldBe(Dependencies(that => that
                                                          .Needs("a", "1.0")
                                                          .Needs("b", "1.0")
                                                          .Needs("c", "1.0")
                                                          .Needs("x", "2.0")
                                                          ));
        }