public static NuGetPackageResolver CreateResolver(LockFile lockFile, string projectPath) { NuGetPackageResolver packageResolver; string userPackageFolder = lockFile.PackageFolders.FirstOrDefault()?.Path; if (userPackageFolder != null) { IEnumerable <string> fallBackFolders = lockFile.PackageFolders.Skip(1).Select(f => f.Path); packageResolver = new NuGetPackageResolver(userPackageFolder, fallBackFolders); } else { NuGetPathContext nugetPathContext = NuGetPathContext.Create(Path.GetDirectoryName(projectPath)); packageResolver = new NuGetPackageResolver(nugetPathContext); } return(packageResolver); }
protected IEnumerable <RuntimeLibrary> GetNugetReferences(string projectFilePath, Project project) { Logger.WriteInfo("Adding nuget references."); ICollection <RuntimeLibrary> runtimeLibraries = new List <RuntimeLibrary>(); LockFileFormat lockFileFormat = new LockFileFormat(); string lockFileFilePath = Path.Combine(Path.GetDirectoryName(projectFilePath), project.GetPropertyValue(PropertyNames.ProjectAssetsFile)); if (!File.Exists(lockFileFilePath)) { Logger.WriteError($"Lock file {lockFileFilePath} not found. Run dotnet restore before executing Automaty."); throw new AutomatyException(); } LockFile lockFile = lockFileFormat.Read(lockFileFilePath); string targetFramework = project.GetPropertyValue(PropertyNames.TargetFramework); if (string.IsNullOrEmpty(targetFramework)) { Logger.WriteDebug("Multi targeting project assembly detected."); targetFramework = GetSuitableTargetFramework(project.GetPropertyValue(PropertyNames.TargetFrameworks)); Logger.WriteDebug($"Using target framework {targetFramework}."); } LockFileTarget lockFileTarget = lockFile.GetTarget(NuGetUtils.ParseFrameworkName(targetFramework), string.Empty); NuGetPackageResolver nuGetPackageResolver = NuGetPackageResolver.CreateResolver(lockFile, Path.GetDirectoryName(projectFilePath)); // Add nuget references foreach (LockFileTargetLibrary library in lockFileTarget.Libraries) { if (library.Type != LibraryType.Package) { continue; } string packageDirectory = nuGetPackageResolver.GetPackageDirectory(library.Name, library.Version); foreach (LockFileItem file in library.RuntimeAssemblies.Where(file => !NuGetUtils.IsPlaceholderFile(file.Path))) { string filePath = Path.GetFullPath(Path.Combine(packageDirectory, file.Path)); Logger.WriteDebug($"Adding \"{filePath}\"."); runtimeLibraries.Add(new RuntimeLibrary { Name = library.Name, DirectoryName = Path.GetDirectoryName(filePath), FileName = Path.GetFileName(filePath) }); } } return(runtimeLibraries); }