private ITaskItem[] RaiseAnalyzers(LockFile lockFile, LockFileTarget target) { var items = new List <ITaskItem>(); Dictionary <string, LockFileTargetLibrary> targetLibraries = null; foreach (var library in lockFile.Libraries) { if (library.IsPackage()) { foreach (var file in library.Files) { if (NuGetUtils.IsApplicableAnalyzer(file, ProjectLanguage)) { if (targetLibraries == null) { targetLibraries = target.Libraries.ToDictionary(l => l.Name, StringComparer.OrdinalIgnoreCase); } if (targetLibraries.TryGetValue(library.Name, out var targetLibrary)) { items.Add(CreatePackageAssetItem(targetLibrary, ResolvePackageAssetPath(targetLibrary, file))); } } } } } return(items.ToArray()); }
// get library and file definitions private void GetPackageAndFileDefinitions() { foreach (var package in LockFile.Libraries) { var packageName = package.Name; var packageVersion = package.Version.ToNormalizedString(); string packageId = $"{packageName}/{packageVersion}"; var item = new TaskItem(packageId); item.SetMetadata(MetadataKeys.Name, packageName); item.SetMetadata(MetadataKeys.Type, package.Type); item.SetMetadata(MetadataKeys.Version, packageVersion); item.SetMetadata(MetadataKeys.Path, package.Path ?? string.Empty); string resolvedPackagePath = ResolvePackagePath(package); item.SetMetadata(MetadataKeys.ResolvedPath, resolvedPackagePath ?? string.Empty); item.SetMetadata(MetadataKeys.DiagnosticLevel, GetPackageDiagnosticLevel(package)); _packageDefinitions.Add(item); if (!EmitLegacyAssetsFileItems) { continue; } foreach (var file in package.Files) { if (NuGetUtils.IsPlaceholderFile(file)) { continue; } var fileKey = $"{packageId}/{file}"; var fileItem = new TaskItem(fileKey); fileItem.SetMetadata(MetadataKeys.Path, file); fileItem.SetMetadata(MetadataKeys.NuGetPackageId, packageName); fileItem.SetMetadata(MetadataKeys.NuGetPackageVersion, packageVersion); string resolvedPath = ResolveFilePath(file, resolvedPackagePath); fileItem.SetMetadata(MetadataKeys.ResolvedPath, resolvedPath ?? string.Empty); if (NuGetUtils.IsApplicableAnalyzer(file, ProjectLanguage)) { fileItem.SetMetadata(MetadataKeys.Analyzer, "true"); fileItem.SetMetadata(MetadataKeys.Type, "AnalyzerAssembly"); // get targets that contain this package var parentTargets = LockFile.Targets .Where(t => t.Libraries.Any(lib => lib.Name == package.Name)); foreach (var target in parentTargets) { string frameworkAlias = _targetNameToAliasMap[target.Name]; var fileDepsItem = new TaskItem(fileKey); fileDepsItem.SetMetadata(MetadataKeys.ParentTarget, frameworkAlias); // Foreign Key fileDepsItem.SetMetadata(MetadataKeys.ParentPackage, packageId); // Foreign Key _fileDependencies.Add(fileDepsItem); } } else { // get a type for the file if one is available if (!_fileTypes.TryGetValue(fileKey, out string fileType)) { fileType = "unknown"; } fileItem.SetMetadata(MetadataKeys.Type, fileType); } _fileDefinitions.Add(fileItem); } } string GetPackageDiagnosticLevel(LockFileLibrary package) { string target = TargetFramework ?? ""; var messages = LockFile.LogMessages.Where(log => log.LibraryId == package.Name && log.TargetGraphs .Select(tg => { var parsedTargetGraph = NuGetFramework.Parse(tg); var alias = _lockFile.PackageSpec.TargetFrameworks.FirstOrDefault(tf => tf.FrameworkName == parsedTargetGraph)?.TargetAlias; return(alias ?? tg); }).Contains(target)); if (!messages.Any()) { return(string.Empty); } return(messages.Max(log => log.Level).ToString()); } }
// get library and file definitions private void GetPackageAndFileDefinitions() { TaskItem item; foreach (var package in LockFile.Libraries) { var packageName = package.Name; var packageVersion = package.Version.ToNormalizedString(); string packageId = $"{packageName}/{packageVersion}"; item = new TaskItem(packageId); item.SetMetadata(MetadataKeys.Name, packageName); item.SetMetadata(MetadataKeys.Type, package.Type); item.SetMetadata(MetadataKeys.Version, packageVersion); item.SetMetadata(MetadataKeys.Path, package.Path ?? string.Empty); string resolvedPackagePath = ResolvePackagePath(package); item.SetMetadata(MetadataKeys.ResolvedPath, resolvedPackagePath ?? string.Empty); _packageDefinitions.Add(item); foreach (var file in package.Files) { if (NuGetUtils.IsPlaceholderFile(file)) { continue; } var fileKey = $"{packageId}/{file}"; var fileItem = new TaskItem(fileKey); fileItem.SetMetadata(MetadataKeys.Path, file); fileItem.SetMetadata(MetadataKeys.PackageName, packageName); fileItem.SetMetadata(MetadataKeys.PackageVersion, packageVersion); string resolvedPath = ResolveFilePath(file, resolvedPackagePath); fileItem.SetMetadata(MetadataKeys.ResolvedPath, resolvedPath ?? string.Empty); if (NuGetUtils.IsApplicableAnalyzer(file, ProjectLanguage)) { fileItem.SetMetadata(MetadataKeys.Analyzer, "true"); fileItem.SetMetadata(MetadataKeys.Type, "AnalyzerAssembly"); // get targets that contain this package var parentTargets = LockFile.Targets .Where(t => t.Libraries.Any(lib => lib.Name == package.Name)); foreach (var target in parentTargets) { var fileDepsItem = new TaskItem(fileKey); fileDepsItem.SetMetadata(MetadataKeys.ParentTarget, target.Name); // Foreign Key fileDepsItem.SetMetadata(MetadataKeys.ParentPackage, packageId); // Foreign Key _fileDependencies.Add(fileDepsItem); } } else { // get a type for the file if one is available string fileType; if (!_fileTypes.TryGetValue(fileKey, out fileType)) { fileType = "unknown"; } fileItem.SetMetadata(MetadataKeys.Type, fileType); } _fileDefinitions.Add(fileItem); } } }