private ProjectItemElement AddPackageReference(ProjectItemGroupElement itemGroupElement, PackageReference package) { LibraryIncludeFlags includeAssets = LibraryIncludeFlags.All; LibraryIncludeFlags excludeAssets = LibraryIncludeFlags.None; LibraryIncludeFlags privateAssets = LibraryIncludeFlags.None; if (package.HasFolder("build") && package.Imports.Count == 0) { excludeAssets |= LibraryIncludeFlags.Build; } if (package.HasFolder("lib") && package.AssemblyReferences.Count == 0) { excludeAssets |= LibraryIncludeFlags.Compile; excludeAssets |= LibraryIncludeFlags.Runtime; } if (package.HasFolder("analyzers") && package.AnalyzerItems.Count == 0) { excludeAssets |= LibraryIncludeFlags.Analyzers; } if (package.IsDevelopmentDependency) { privateAssets |= LibraryIncludeFlags.All; } if (package.IsMissingTransitiveDependency) { includeAssets = LibraryIncludeFlags.None; excludeAssets = LibraryIncludeFlags.None; privateAssets = LibraryIncludeFlags.All; } ProjectItemElement itemElement = itemGroupElement.AppendItem("PackageReference", package.PackageIdentity.Id); itemElement.AddMetadataAsAttribute("Version", package.PackageVersion.ToNormalizedString()); if (includeAssets != LibraryIncludeFlags.All) { itemElement.AddMetadataAsAttribute("IncludeAssets", includeAssets.ToString()); } if (excludeAssets != LibraryIncludeFlags.None) { itemElement.AddMetadataAsAttribute("ExcludeAssets", excludeAssets.ToString()); } if (privateAssets != LibraryIncludeFlags.None) { itemElement.AddMetadataAsAttribute("PrivateAssets", privateAssets.ToString()); } if (package.GeneratePathProperty) { itemElement.AddMetadataAsAttribute("GeneratePathProperty", bool.TrueString); } return(itemElement); }