private static Result InitializeCore(ApplicationHostContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } context.ProjectDirectory = context.Project?.ProjectDirectory ?? context.ProjectDirectory; context.RootDirectory = context.RootDirectory ?? ProjectRootResolver.ResolveRootDirectory(context.ProjectDirectory); context.PackagesDirectory = context.PackagesDirectory ?? PackageDependencyProvider.ResolveRepositoryPath(context.RootDirectory); LockFileLookup lockFileLookup = null; if (context.Project == null) { Project project; if (Project.TryGetProject(context.ProjectDirectory, out project)) { context.Project = project; } else { throw new InvalidOperationException($"Unable to resolve project from {context.ProjectDirectory}"); } } var projectLockJsonPath = Path.Combine(context.ProjectDirectory, LockFileReader.LockFileName); if (context.LockFile == null && File.Exists(projectLockJsonPath)) { var lockFileReader = new LockFileReader(); context.LockFile = lockFileReader.Read(projectLockJsonPath); } var validLockFile = true; string lockFileValidationMessage = null; if (context.LockFile != null) { validLockFile = (context.LockFile.Version == Constants.LockFileVersion) && context.LockFile.IsValidForProject(context.Project, out lockFileValidationMessage); lockFileLookup = new LockFileLookup(context.LockFile); } var libraries = new List<LibraryDescription>(); var packageResolver = new PackageDependencyProvider(context.PackagesDirectory); var projectResolver = new ProjectDependencyProvider(); context.MainProject = projectResolver.GetDescription(context.TargetFramework, context.Project); // Add the main project libraries.Add(context.MainProject); if (lockFileLookup != null) { var target = SelectTarget(context, context.LockFile); if (target != null) { if (Logger.IsEnabled && string.IsNullOrEmpty(target.RuntimeIdentifier)) { // REVIEW(anurse): Is there ever a reason we want to use the RID-less target now? Logger.TraceWarning($"[{nameof(ApplicationHostContext)}] Lock File Target is Runtime-agnostic! This is generally not good."); } Logger.TraceInformation($"[{nameof(ApplicationHostContext)}] Using Lock File Target: {target.TargetFramework}/{target.RuntimeIdentifier}"); foreach (var library in target.Libraries) { if (string.Equals(library.Type, "project")) { var projectLibrary = lockFileLookup.GetProject(library.Name); var path = Path.GetFullPath(Path.Combine(context.ProjectDirectory, projectLibrary.Path)); var projectDescription = projectResolver.GetDescription(library.Name, path, library); libraries.Add(projectDescription); } else { var packageEntry = lockFileLookup.GetPackage(library.Name, library.Version); var packageDescription = packageResolver.GetDescription(packageEntry, library); libraries.Add(packageDescription); } } } } lockFileLookup?.Clear(); var lockFilePresent = context.LockFile != null; context.LockFile = null; // LockFile is no longer needed return new Result(libraries, lockFilePresent, validLockFile, lockFileValidationMessage); }
private static Result InitializeCore(ApplicationHostContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } context.ProjectDirectory = context.Project?.ProjectDirectory ?? context.ProjectDirectory; context.RootDirectory = context.RootDirectory ?? ProjectRootResolver.ResolveRootDirectory(context.ProjectDirectory); context.PackagesDirectory = context.PackagesDirectory ?? PackageDependencyProvider.ResolveRepositoryPath(context.RootDirectory); LockFileLookup lockFileLookup = null; if (context.Project == null) { Project project; if (Project.TryGetProject(context.ProjectDirectory, out project)) { context.Project = project; } else { throw new InvalidOperationException($"Unable to resolve project from {context.ProjectDirectory}"); } } var projectLockJsonPath = Path.Combine(context.ProjectDirectory, LockFileReader.LockFileName); if (context.LockFile == null && File.Exists(projectLockJsonPath)) { var lockFileReader = new LockFileReader(); context.LockFile = lockFileReader.Read(projectLockJsonPath); } var validLockFile = true; string lockFileValidationMessage = null; if (context.LockFile != null) { validLockFile = (context.LockFile.Version == Constants.LockFileVersion) && context.LockFile.IsValidForProject(context.Project, out lockFileValidationMessage); lockFileLookup = new LockFileLookup(context.LockFile); } var libraries = new List <LibraryDescription>(); var packageResolver = new PackageDependencyProvider(context.PackagesDirectory); var projectResolver = new ProjectDependencyProvider(); context.MainProject = projectResolver.GetDescription(context.TargetFramework, context.Project); // Add the main project libraries.Add(context.MainProject); if (lockFileLookup != null) { var target = SelectTarget(context, context.LockFile); if (target != null) { if (Logger.IsEnabled && string.IsNullOrEmpty(target.RuntimeIdentifier)) { // REVIEW(anurse): Is there ever a reason we want to use the RID-less target now? Logger.TraceWarning($"[{nameof(ApplicationHostContext)}] Lock File Target is Runtime-agnostic! This is generally not good."); } Logger.TraceInformation($"[{nameof(ApplicationHostContext)}] Using Lock File Target: {target.TargetFramework}/{target.RuntimeIdentifier}"); foreach (var library in target.Libraries) { if (string.Equals(library.Type, "project")) { var projectLibrary = lockFileLookup.GetProject(library.Name); var path = Path.GetFullPath(Path.Combine(context.ProjectDirectory, projectLibrary.Path)); var projectDescription = projectResolver.GetDescription(library.Name, path, library); libraries.Add(projectDescription); } else { var packageEntry = lockFileLookup.GetPackage(library.Name, library.Version); var packageDescription = packageResolver.GetDescription(packageEntry, library); libraries.Add(packageDescription); } } } } lockFileLookup?.Clear(); var lockFilePresent = context.LockFile != null; context.LockFile = null; // LockFile is no longer needed return(new Result(libraries, lockFilePresent, validLockFile, lockFileValidationMessage)); }