// 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))})"); } }
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") )); }
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); }
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"))); }
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)); }); }
// 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"); } } }
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"))); }
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") )); }