private void AddPackageReferenceIntoItemGroup(ProjectItemGroupElement itemGroup, LibraryDependency libraryDependency) { var packageVersion = libraryDependency.LibraryRange.VersionRange.OriginalString ?? libraryDependency.LibraryRange.VersionRange.MinVersion.ToString(); var item = itemGroup.AddItem(PACKAGE_REFERENCE_TYPE_TAG, libraryDependency.Name); item.AddMetadata(VERSION_TAG, packageVersion, expressAsAttribute: true); if (libraryDependency.IncludeType != LibraryIncludeFlags.All) { var includeFlags = MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(libraryDependency.IncludeType)); item.AddMetadata(IncludeAssets, includeFlags, expressAsAttribute: false); } if (libraryDependency.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent) { var suppressParent = MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(libraryDependency.SuppressParent)); item.AddMetadata(PrivateAssets, suppressParent, expressAsAttribute: false); } Logger.LogInformation(string.Format(CultureInfo.CurrentCulture, Strings.Info_AddPkgAdded, libraryDependency.Name, packageVersion, itemGroup.ContainingProject.FullPath)); }
private void UpdatePackageReferenceItems(IEnumerable <ProjectItem> packageReferencesItems, LibraryDependency libraryDependency) { // We validate that the operation does not update any imported items // If it does then we throw a user friendly exception without making any changes ValidateNoImportedItemsAreUpdated(packageReferencesItems, libraryDependency, UPDATE_OPERATION); foreach (var packageReferenceItem in packageReferencesItems) { var packageVersion = libraryDependency.LibraryRange.VersionRange.OriginalString ?? libraryDependency.LibraryRange.VersionRange.MinVersion.ToString(); packageReferenceItem.SetMetadataValue(VERSION_TAG, packageVersion); if (libraryDependency.IncludeType != LibraryIncludeFlags.All) { var includeFlags = MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(libraryDependency.IncludeType)); packageReferenceItem.SetMetadataValue(IncludeAssets, includeFlags); } if (libraryDependency.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent) { var suppressParent = MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(libraryDependency.SuppressParent)); packageReferenceItem.SetMetadataValue(PrivateAssets, suppressParent); } Logger.LogInformation(string.Format(CultureInfo.CurrentCulture, Strings.Info_AddPkgUpdated, libraryDependency.Name, packageVersion, packageReferenceItem.Xml.ContainingProject.FullPath)); } }
public override Task <bool> InstallPackageAsync(string packageId, VersionRange range, INuGetProjectContext nuGetProjectContext, BuildIntegratedInstallationContext installationContext, CancellationToken token) { var formattedRange = range.MinVersion.ToNormalizedString(); nuGetProjectContext.Log(MessageLevel.Info, "Installing {0}", $"{packageId} {formattedRange}"); if (installationContext.SuccessfulFrameworks.Any() && installationContext.UnsuccessfulFrameworks.Any()) { foreach (var framework in installationContext.SuccessfulFrameworks) { if (!installationContext.OriginalFrameworks.TryGetValue(framework, out string originalFramework)) { originalFramework = framework.GetShortFolderName(); } var metadata = new Dictionary <string, string>(); // SuppressParent could be set to All if developmentDependency flag is true in package nuspec file. if (installationContext.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent && installationContext.IncludeType != LibraryIncludeFlags.All) { metadata = new Dictionary <string, string> { { ProjectItemProperties.PrivateAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.SuppressParent)) }, { ProjectItemProperties.IncludeAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.IncludeType)) } }; } AddOrUpdatePackageReference(packageId, formattedRange, metadata, TargetFrameworkCondition, originalFramework); } } else { // Install the package to all frameworks. var metadata = new Dictionary <string, string>(); if (installationContext.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent && installationContext.IncludeType != LibraryIncludeFlags.All) { metadata.Add(ProjectItemProperties.PrivateAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.SuppressParent))); metadata.Add(ProjectItemProperties.IncludeAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.IncludeType))); } AddOrUpdatePackageReference(packageId, formattedRange, metadata, null, null); } return(Task.FromResult(true)); }
public override async Task <bool> InstallPackageAsync( string packageId, VersionRange range, INuGetProjectContext nuGetProjectContext, BuildIntegratedInstallationContext installationContext, CancellationToken token) { var formattedRange = range.OriginalString ?? range.MinVersion.ToNormalizedString(); nuGetProjectContext.Log(MessageLevel.Info, Strings.InstallingPackage, $"{packageId} {formattedRange}"); if (installationContext.SuccessfulFrameworks.Any() && installationContext.UnsuccessfulFrameworks.Any()) { // This is the "partial install" case. That is, install the package to only a subset of the frameworks // supported by this project. var conditionalService = _unconfiguredProject .Services .ExportProvider .GetExportedValue <IConditionalPackageReferencesService>(); if (conditionalService == null) { throw new InvalidOperationException(string.Format( Strings.UnableToGetCPSPackageInstallationService, ProjectFullPath)); } foreach (var framework in installationContext.SuccessfulFrameworks) { string originalFramework; if (!installationContext.OriginalFrameworks.TryGetValue(framework, out originalFramework)) { originalFramework = framework.GetShortFolderName(); } var reference = await conditionalService.AddAsync( packageId, formattedRange, TargetFrameworkCondition, originalFramework); // SuppressParent could be set to All if developmentDependency flag is true in package nuspec file. if (installationContext.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent && installationContext.IncludeType != LibraryIncludeFlags.All) { await SetPackagePropertyValueAsync( reference.Metadata, ProjectItemProperties.PrivateAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.SuppressParent))); await SetPackagePropertyValueAsync( reference.Metadata, ProjectItemProperties.IncludeAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.IncludeType))); } } } else { // Install the package to all frameworks. var configuredProject = await _unconfiguredProject.GetSuggestedConfiguredProjectAsync(); var result = await configuredProject .Services .PackageReferences .AddAsync(packageId, formattedRange); // This is the update operation if (!result.Added) { var existingReference = result.Reference; await existingReference.Metadata.SetPropertyValueAsync("Version", formattedRange); } if (installationContext.SuppressParent != LibraryIncludeFlagUtils.DefaultSuppressParent && installationContext.IncludeType != LibraryIncludeFlags.All) { await SetPackagePropertyValueAsync( result.Reference.Metadata, ProjectItemProperties.PrivateAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.SuppressParent))); await SetPackagePropertyValueAsync( result.Reference.Metadata, ProjectItemProperties.IncludeAssets, MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(installationContext.IncludeType))); } } return(true); }
internal static void SetMetadataValue(this IPropertySet propertySet, string name, LibraryIncludeFlags flags) { string value = MSBuildStringUtility.Convert(LibraryIncludeFlagUtils.GetFlagString(flags)); propertySet.SetValue(name, value); }