in src/Tasks/Microsoft.NET.Build.Tasks/PreprocessPackageDependenciesDesignTime.cs [76:122]
protected override void ExecuteCore()
{
ImplicitPackageReferences = GetImplicitPackageReferences(DefaultImplicitPackages);
PopulateTargets();
PopulatePackages();
PopulateAssemblies();
PopulateExistingReferenceItems();
InputDiagnosticMessages = InputDiagnosticMessages ?? Array.Empty<ITaskItem>();
PopulateDiagnosticsMap();
AddDependenciesToTheWorld(Packages, PackageDependencies);
AddDependenciesToTheWorld(Assemblies, FileDependencies, (item) =>
{
// We keep analyzers and assemblies with CompileTimeAssembly metadata; skip everything else.
ItemMetadata itemMetadata = null;
if (Assemblies.TryGetValue(item.ItemSpec, out itemMetadata) &&
itemMetadata.Type == DependencyType.AnalyzerAssembly)
{
return false;
}
var fileGroup = item.GetMetadata(MetadataKeys.FileGroup);
return string.IsNullOrEmpty(fileGroup) || !fileGroup.Equals(CompileTimeAssemblyMetadata);
});
AddDependenciesToTheWorld(Assemblies, ExistingReferenceItemDependencies);
AddDependenciesToTheWorld(DiagnosticsMap, InputDiagnosticMessages);
// prepare output collection: add corresponding metadata to ITaskItem based in item type
DependenciesDesignTime = DependenciesWorld.Select(itemKvp =>
{
var newTaskItem = new TaskItem(itemKvp.Key);
foreach(var metadataKvp in itemKvp.Value.ToDictionary())
{
newTaskItem.SetMetadata(metadataKvp.Key, metadataKvp.Value);
}
return newTaskItem;
}).ToArray();
}