Ejemplo n.º 1
0
        /// <summary>
        /// Emulates a JSON deserialization from project.json to PackageSpec in a post-project.json world
        /// </summary>
        private PackageSpec GetPackageSpec()
        {
            EnsureUIThread();

            var projectReferences = _project.GetLegacyCSProjProjectReferences(_desiredPackageReferenceMetadata)
                                    .Select(ToProjectRestoreReference);

            var packageReferences = _project.GetLegacyCSProjPackageReferences(_desiredPackageReferenceMetadata)
                                    .Select(ToPackageLibraryDependency).ToList();

            var packageTargetFallback = _project.PackageTargetFallback?.Split(new[] { ';' })
                                        .Select(NuGetFramework.Parse)
                                        .ToList();

            var projectTfi = new TargetFrameworkInformation()
            {
                FrameworkName = _project.TargetNuGetFramework,
                Dependencies  = packageReferences,
                Imports       = packageTargetFallback ?? new List <NuGetFramework>()
            };

            if ((projectTfi.Imports?.Count ?? 0) > 0)
            {
                projectTfi.FrameworkName = new FallbackFramework(projectTfi.FrameworkName, packageTargetFallback);
            }

            // Build up runtime information.
            var runtimes     = _project.Runtimes;
            var supports     = _project.Supports;
            var runtimeGraph = new RuntimeGraph(runtimes, supports);

            // In legacy CSProj, we only have one target framework per project
            var tfis = new TargetFrameworkInformation[] { projectTfi };

            return(new PackageSpec(tfis)
            {
                Name = _projectName ?? _projectUniqueName,
                Version = new NuGetVersion(_project.Version),
                Authors = new string[] { },
                Owners = new string[] { },
                Tags = new string[] { },
                ContentFiles = new string[] { },
                Dependencies = packageReferences,
                FilePath = _projectFullPath,
                RuntimeGraph = runtimeGraph,
                RestoreMetadata = new ProjectRestoreMetadata
                {
                    ProjectStyle = ProjectStyle.PackageReference,
                    OutputPath = GetBaseIntermediatePath(),
                    ProjectPath = _projectFullPath,
                    ProjectName = _projectName ?? _projectUniqueName,
                    ProjectUniqueName = _projectFullPath,
                    OriginalTargetFrameworks = tfis
                                               .Select(tfi => tfi.FrameworkName.GetShortFolderName())
                                               .ToList(),
                    TargetFrameworks = new List <ProjectRestoreMetadataFrameworkInfo>()
                    {
                        new ProjectRestoreMetadataFrameworkInfo(tfis[0].FrameworkName)
                        {
                            ProjectReferences = projectReferences?.ToList()
                        }
                    }
                }
            });
        }