public static ManifestDeclaration ToData(CdmManifestDeclarationDefinition instance, ResolveOptions resOpt, CopyOptions options)
        {
            var result = new ManifestDeclaration
            {
                Explanation             = instance.Explanation,
                ManifestName            = instance.ManifestName,
                LastFileStatusCheckTime = TimeUtils.GetFormattedDateString(instance.LastFileStatusCheckTime),
                LastFileModifiedTime    = TimeUtils.GetFormattedDateString(instance.LastFileModifiedTime),
                Definition = instance.Definition
            };

            return(result);
        }
 public static CdmManifestDeclarationDefinition InstanceFromData(CdmCorpusContext ctx, ManifestDeclaration obj)
 {
     return(CdmObjectBase.InstanceFromData <CdmManifestDeclarationDefinition, ManifestDeclaration>(ctx, obj));
 }
        public static CdmManifestDeclarationDefinition FromData(CdmCorpusContext ctx, ManifestDeclaration obj)
        {
            var newManifestDoc = ctx.Corpus.MakeObject <CdmManifestDeclarationDefinition>(CdmObjectType.ManifestDeclarationDef, obj.ManifestName);

            newManifestDoc.Definition = obj.Definition;

            if (obj.LastFileStatusCheckTime != null)
            {
                newManifestDoc.LastFileStatusCheckTime = DateTimeOffset.Parse(obj.LastFileStatusCheckTime);
            }

            if (obj.LastFileModifiedTime != null)
            {
                newManifestDoc.LastFileModifiedTime = DateTimeOffset.Parse(obj.LastFileModifiedTime);
            }

            if (obj.Explanation != null)
            {
                newManifestDoc.Explanation = obj.Explanation;
            }
            return(newManifestDoc);
        }
示例#4
0
        /// <summary>
        /// Performs the NuGet package resolution.
        /// </summary>
        public override bool Execute()
        {
            var analyzers  = new List <ITaskItem>();
            var references = new List <ITaskItem>();
            var copyLocals = new List <ITaskItem>();

            if (PackagesConfigs == null || PackagesConfigs.Length == 0)
            {
                Log.LogError("PackagesConfigs property not specified.");
                return(false);
            }

            if (PackagesConfigs.Any(pc => string.IsNullOrWhiteSpace(pc.ItemSpec)))
            {
                Log.LogError("A PackagesConfigs element was not specified.");
            }

            ITaskItem packagesConfigNotFound = PackagesConfigs.FirstOrDefault(pc => !File.Exists(pc.ItemSpec));

            if (packagesConfigNotFound != default(ITaskItem))
            {
                Log.LogError("File '{0}' not found.", packagesConfigNotFound.ItemSpec);
                return(false);
            }

            var targetFrameworks = new List <FrameworkName>();
            var targetFramework  = new FrameworkName(TargetFramework);

            if (targetFramework.Identifier == ".NETPortable")
            {
                // Let's convert
                var folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86), @"Reference Assemblies\Microsoft\Framework\.NETPortable", "v" + targetFramework.Version, "Profile", targetFramework.Profile, "SupportedFrameworks");

                if (Directory.Exists(folder))
                {
                    foreach (var framework in Directory.EnumerateFiles(folder, "*.xml"))
                    {
                        var xml = XDocument.Load(framework).Root;
                        targetFrameworks.Add(new FrameworkName(xml.Attribute("Identifier").Value, Version.Parse(xml.Attribute("MinimumVersion").Value)));
                    }
                }
                else
                {
                    // If the portable profile doesn't exist lets fallback to the default for Profile7.
                    targetFrameworks.Add(new FrameworkName(".NETFramework", new Version(4, 5)));
                    targetFrameworks.Add(new FrameworkName(".NETCore", new Version(4, 5)));
                }
            }
            else
            {
                targetFrameworks.Add(targetFramework);
            }

            var context = AssetResolutionContext.Empty
                          .WithTargetFrameworks(new FrameworkNameSet(targetFrameworks))
                          .WithArchitecture(Platform ?? "")
                          .WithAssemblyAssetTypes()
                          .RegisterProperty("ProjectType", new LanguagePropertyDefinition())
                          .SetProperty("ProjectType", Language)
                          .RegisterProperty("DesignTimeOnly", new AnythingGoesPropertyDefinition())
                          .SetProperty("DesignTimeOnly", "true")
                          .RegisterAssetType("Analyzer");

            var platformNames = new List <PlatformName>();

            PlatformName singularPlatformName;

            if (PlatformName.TryParse(TargetPlatformMoniker, out singularPlatformName))
            {
                platformNames.Add(singularPlatformName);
            }

            if (platformNames.Any())
            {
                context = context.WithTargetPlatforms(new PlatformNameSet(platformNames));
            }

            var resolver        = new AssetResolver(context);
            var packagesConfigs = (from packageConfig in PackagesConfigs select new PackageReferenceFile(Path.GetFullPath(packageConfig.ItemSpec))).ToArray();
            var succeeded       = true;

            var repository = new SharedPackageRepository(PackageRoot);

            foreach (var packageReference in GetPackageReferences(packagesConfigs))
            {
                IPackage package;
                if (!repository.TryFindPackage(packageReference.Id, packageReference.Version, out package))
                {
                    Log.LogError("Unable to find nupkg for {0}.", packageReference.Id);
                    succeeded = false;
                    continue;
                }

                var packageDescription = packageReference.Id + "." + packageReference.Version.ToString();
                var manifest           = ManifestDeclaration.Parse(Path.Combine(PackageRoot, packageDescription), package);

                // If there are no assets we cannot
                if (!manifest.Groups.Any())
                {
                    Log.LogMessage("no assets for " + packageDescription);
                    continue;
                }

                try
                {
                    Log.LogMessage("resolving assets for " + packageDescription);

                    var assets = resolver.Resolve(manifest);

                    foreach (var asset in assets)
                    {
                        switch (asset.Type)
                        {
                        case "Analyzer":

                            analyzers.Add(new TaskItem(asset.Value));
                            Log.LogMessage("resolved analyzer: " + asset.Value);
                            break;

                        case WellKnownAssetType.ReferenceOnly:
                        {
                            var taskItem = new TaskItem(asset.Value);

                            taskItem.SetMetadata("NuGetPackageId", packageReference.Id);
                            taskItem.SetMetadata("NuGetPackageVersion", packageReference.Version.ToString());
                            taskItem.SetMetadata("ReferenceGrouping", packageReference.Id + ",Version=" + packageReference.Version.Version);
                            taskItem.SetMetadata("ReferenceGroupingDisplayName", packageReference.Id);
                            taskItem.SetMetadata("Private", "false");
                            references.Add(taskItem);

                            Log.LogMessage("resolved reference: " + asset.Value);
                            break;
                        }

                        case WellKnownAssetType.CopyLocal:
                        {
                            var taskItem = new TaskItem(asset.Value);
                            taskItem.SetMetadata("CopyToOutputDirectory", "PreserveNewest");
                            copyLocals.Add(taskItem);

                            Log.LogMessage("resolved copylocal: " + asset.Value);
                            break;
                        }
                        }
                    }
                }
                catch (AssetResolutionException ex)
                {
                    Log.LogWarning("Unable to resolve the assets of {0}: {1}", packageReference.Id, ex.Message);
                }
            }

            ResolvedAnalyzers  = analyzers.ToArray();
            ResolvedReferences = references.ToArray();
            ResolvedCopyLocal  = copyLocals.ToArray();

            return(succeeded);
        }