Пример #1
0
        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);
        }
Пример #2
0
        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);
        }