private void ApplyTargetFramework(XDocument xDoc, Runtime.Project project) { // Get the system.web element var systemWeb = GetOrAddElement(xDoc.Root, "system.web"); var httpRuntime = systemWeb.Element("httpRuntime"); // No httpRuntime element, so create it if (httpRuntime == null) { httpRuntime = new XElement("httpRuntime"); systemWeb.Add(httpRuntime); } // There is an httpRuntime element. The user may have already set this attribute... else if (httpRuntime.Attribute("targetFramework") != null) { // User already had a target framework, leave it alone return; } // Ok, now we have an httpRuntime element and we know we need to set thet targetFramework on it. var bestDnxVersion = project.GetTargetFrameworks() .Where(f => f.FrameworkName.Identifier.Equals(FrameworkNames.LongNames.Dnx)) .OrderByDescending(f => f.FrameworkName.Version) .Select(f => f.FrameworkName.Version) .FirstOrDefault(); if (bestDnxVersion != null) { httpRuntime.SetAttributeValue("targetFramework", bestDnxVersion.ToString()); } }
public static IEnumerable <FrameworkName> SelectFrameworks(Runtime.Project project, IDictionary <FrameworkName, string> specifiedFrameworks, FrameworkName fallbackFramework, out string errorMessage) { var projectFrameworks = new HashSet <FrameworkName>( project.GetTargetFrameworks() .Select(c => c.FrameworkName)); IEnumerable <FrameworkName> frameworks = null; if (projectFrameworks.Count > 0) { // Specified target frameworks have to be a subset of the project frameworks if (!ValidateFrameworks(projectFrameworks, specifiedFrameworks, out errorMessage)) { return(null); } frameworks = specifiedFrameworks.Count > 0 ? specifiedFrameworks.Keys : (IEnumerable <FrameworkName>)projectFrameworks; } else { frameworks = new[] { fallbackFramework }; } errorMessage = string.Empty; return(frameworks); }
public static TargetFrameworkInformation GetCompatibleTargetFramework(this Runtime.Project project, FrameworkName targetFramework) { IEnumerable<TargetFrameworkInformation> targets; if (VersionUtility.GetNearest(targetFramework, project.GetTargetFrameworks(), out targets) && targets.Any()) { return targets.FirstOrDefault(); } return new TargetFrameworkInformation { Dependencies = new List<LibraryDependency>() }; }
private void WriteLockFile(string projectLockFilePath, Runtime.Project project, List <GraphItem> graphItems, PackageRepository repository, IEnumerable <FrameworkName> frameworks) { var lockFile = new LockFile(); lockFile.Islocked = Lock; using (var sha512 = SHA512.Create()) { foreach (var item in graphItems.OrderBy(x => x.Match.Library, new LibraryComparer())) { var library = item.Match.Library; var packageInfo = repository.FindPackagesById(library.Name) .FirstOrDefault(p => p.Version == library.Version); if (packageInfo == null) { continue; } var package = packageInfo.Package; var lockFileLib = LockFileUtils.CreateLockFileLibraryForProject( project, package, sha512, frameworks, new DefaultPackagePathResolver(repository.RepositoryRoot), correctedPackageName: library.Name); lockFile.Libraries.Add(lockFileLib); } } // Use empty string as the key of dependencies shared by all frameworks lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( string.Empty, project.Dependencies.Select(x => x.LibraryRange.ToString()))); foreach (var frameworkInfo in project.GetTargetFrameworks()) { lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( frameworkInfo.FrameworkName.ToString(), frameworkInfo.Dependencies.Select(x => x.LibraryRange.ToString()))); } var lockFileFormat = new LockFileFormat(); lockFileFormat.Write(projectLockFilePath, lockFile); }
private void WriteLockFile(LockFile previousLockFile, string projectLockFilePath, Runtime.Project project, List <GraphItem> graphItems, PackageRepository repository, IProjectResolver projectResolver, IEnumerable <TargetContext> contexts) { var resolver = new DefaultPackagePathResolver(repository.RepositoryRoot.Root); var previousPackageLibraries = previousLockFile?.PackageLibraries.ToDictionary(l => Tuple.Create(l.Name, l.Version)); var lockFile = new LockFile(); lockFile.Islocked = Lock; // Use empty string as the key of dependencies shared by all frameworks lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( string.Empty, project.Dependencies.Select(x => x.LibraryRange.ToString()))); foreach (var frameworkInfo in project.GetTargetFrameworks()) { lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( frameworkInfo.FrameworkName.ToString(), frameworkInfo.Dependencies.Select(x => x.LibraryRange.ToString()))); } // Record all libraries used foreach (var item in graphItems.OrderBy(x => x.Match.Library, new LibraryComparer())) { if (item.Match.LibraryType.Equals(Runtime.LibraryTypes.Implicit)) { continue; } var library = item.Match.Library; if (library.Name == project.Name) { continue; } if (item.Match.LibraryType.Equals(Runtime.LibraryTypes.Project)) { var projectDependency = projectResolver.FindProject(library.Name); var projectLibrary = LockFileUtils.CreateLockFileProjectLibrary(project, projectDependency); lockFile.ProjectLibraries.Add(projectLibrary); } else if (item.Match.LibraryType.Equals(Runtime.LibraryTypes.Package)) { var packageInfo = repository.FindPackagesById(library.Name) .FirstOrDefault(p => p.Version == library.Version); if (packageInfo == null) { throw new InvalidOperationException($"Unresolved package: {library.Name}"); } LockFilePackageLibrary previousLibrary = null; previousPackageLibraries?.TryGetValue(Tuple.Create(library.Name, library.Version), out previousLibrary); var package = packageInfo.Package; // The previousLibrary can't be a project, otherwise exception has been thrown. lockFile.PackageLibraries.Add(LockFileUtils.CreateLockFilePackageLibrary( previousLibrary, resolver, package, correctedPackageName: library.Name)); } else { throw new InvalidOperationException($"Unresolved library: {library.Name}"); } } var packageLibraries = lockFile.PackageLibraries.ToDictionary(lib => Tuple.Create(lib.Name, lib.Version)); // Add the contexts foreach (var context in contexts) { var target = new LockFileTarget(); target.TargetFramework = context.RestoreContext.FrameworkName; target.RuntimeIdentifier = context.RestoreContext.RuntimeName; foreach (var match in context.Matches.OrderBy(x => x.Library, new LibraryComparer())) { if (match.Library.Name == project.Name) { continue; } if (match.LibraryType.Equals(Runtime.LibraryTypes.Project)) { var projectDependency = projectResolver.FindProject(match.Library.Name); var projectTargetLibrary = LockFileUtils.CreateLockFileTargetLibrary(projectDependency, context.RestoreContext); target.Libraries.Add(projectTargetLibrary); } else if (match.LibraryType.Equals(Runtime.LibraryTypes.Package)) { var packageInfo = repository.FindPackagesById(match.Library.Name) .FirstOrDefault(p => p.Version == match.Library.Version); var package = packageInfo.Package; target.Libraries.Add(LockFileUtils.CreateLockFileTargetLibrary( packageLibraries[Tuple.Create(match.Library.Name, match.Library.Version)], package, context.RestoreContext, correctedPackageName: match.Library.Name)); } } lockFile.Targets.Add(target); } var lockFileFormat = new LockFileFormat(); lockFileFormat.Write(projectLockFilePath, lockFile); }
private void WriteLockFile(LockFile previousLockFile, string projectLockFilePath, Runtime.Project project, List <GraphItem> graphItems, PackageRepository repository, IEnumerable <TargetContext> contexts) { var resolver = new DefaultPackagePathResolver(repository.RepositoryRoot); var previousLibraries = previousLockFile?.Libraries.ToDictionary(l => Tuple.Create(l.Name, l.Version)); var lockFile = new LockFile(); lockFile.Islocked = Lock; // Use empty string as the key of dependencies shared by all frameworks lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( string.Empty, project.Dependencies.Select(x => x.LibraryRange.ToString()))); foreach (var frameworkInfo in project.GetTargetFrameworks()) { lockFile.ProjectFileDependencyGroups.Add(new ProjectFileDependencyGroup( frameworkInfo.FrameworkName.ToString(), frameworkInfo.Dependencies.Select(x => x.LibraryRange.ToString()))); } // Record all libraries used foreach (var item in graphItems.OrderBy(x => x.Match.Library, new LibraryComparer())) { var library = item.Match.Library; var packageInfo = repository.FindPackagesById(library.Name) .FirstOrDefault(p => p.Version == library.Version); if (packageInfo == null) { continue; } var package = packageInfo.Package; LockFileLibrary previousLibrary = null; previousLibraries?.TryGetValue(Tuple.Create(library.Name, library.Version), out previousLibrary); var lockFileLib = LockFileUtils.CreateLockFileLibrary( previousLibrary, resolver, package, correctedPackageName: library.Name); lockFile.Libraries.Add(lockFileLib); } var libraries = lockFile.Libraries.ToDictionary(lib => Tuple.Create(lib.Name, lib.Version)); // Add the contexts foreach (var context in contexts) { var target = new LockFileTarget(); target.TargetFramework = context.RestoreContext.FrameworkName; target.RuntimeIdentifier = context.RestoreContext.RuntimeName; foreach (var library in context.Libraries.OrderBy(x => x, new LibraryComparer())) { var packageInfo = repository.FindPackagesById(library.Name) .FirstOrDefault(p => p.Version == library.Version); if (packageInfo == null) { continue; } var package = packageInfo.Package; var targetLibrary = LockFileUtils.CreateLockFileTargetLibrary( libraries[Tuple.Create(library.Name, library.Version)], package, context.RestoreContext, correctedPackageName: library.Name); target.Libraries.Add(targetLibrary); } lockFile.Targets.Add(target); } var lockFileFormat = new LockFileFormat(); lockFileFormat.Write(projectLockFilePath, lockFile); }