/// <summary> /// Populates specified project object from context /// </summary> /// <param name="project"></param> /// <param name="context"></param> public IProject Build(IProject project, ProjectContext context) { project.AbsolutePath = context.FileName; project.Name = context.Name; project.Version = context.Version; project.PackagesConfigPath = context.PackagesConfigFileSpec; project.AppConfigPath = context.AppConfigFileSpec; foreach (var packageReferenceContext in context.PackageReferences) { if (_packageCache.PackagesDictionary.TryGetValue(packageReferenceContext.Name, out var package)) { var reference = new PackageReference { Package = package, Version = packageReferenceContext.Version, PreReleaseSuffix = packageReferenceContext.PreRelease, LineNumber = packageReferenceContext.LineNumber, OriginalXml = packageReferenceContext.OriginalXml }; if (project.PackageReferenceDictionary.TryGetValue(reference.Package.Name, out var existingReference)) { _logErrorAction(project, $"There is already a reference to package {existingReference.Package.Name} at version {existingReference.Version}"); } project.PackageReferenceDictionary[reference.Package.Name] = reference; } else { _logErrorAction(project, $"Package {packageReferenceContext.Name} not found in cache"); } } if (context.HasPackagesConfig) { foreach (var packageContext in context.GetPackagesConfigContext().Packages) { if (_packageCache.PackagesDictionary.TryGetValue(packageContext.Id, out var package)) { if (!project.PackageReferenceDictionary.ContainsKey(package.Name)) { project.PackageReferenceDictionary[package.Name] = new PackageReference { Package = package, Version = packageContext.Version, PreReleaseSuffix = packageContext.PreRelease, PackagesConfigLineNumber = packageContext.LineNumber }; } } else { _logErrorAction(project, $"Package {packageContext.Id} not found in cache"); } } } foreach (var referenceContext in context.References.Where(c => c.IsPackage)) { if (_packageCache.PackagesDictionary.TryGetValue(referenceContext.Name, out var package)) { if (!project.PackageReferenceDictionary.TryGetValue(package.Name, out var reference)) { reference = new PackageReference { Package = package, Version = referenceContext.AssemblyVersion, }; project.PackageReferenceDictionary[package.Name] = reference; } if (reference.AssemblyReferences == null) { reference.AssemblyReferences = new List <AssemblyReference>(); } reference.AssemblyReferences.Add(new AssemblyReference { Package = package, HintPath = referenceContext.HintPath, Version = referenceContext.AssemblyVersion }); } else { _logErrorAction(project, $"Package {referenceContext.Name} not found in cache"); } } if (context.HasAppConfig) { foreach (var assemblyRedirect in context.GetAppConfigContext().AssemblyRedirects) { project.BindingRedirections.Add(new BindingRedirection { AssemblyName = assemblyRedirect.AssemblyName, OldVersionFrom = assemblyRedirect.OldVersionFrom, OldVersionTo = assemblyRedirect.OldVersionTo, NewVersion = assemblyRedirect.NewVersion, LineNumber = assemblyRedirect.LineNumber }); } } return(project); }