protected override void ExecuteCore()

in src/Tasks/Microsoft.NET.Build.Tasks/GetPackageDirectory.cs [26:64]


        protected override void ExecuteCore()
        {
            if (Items != null)
            {
                NuGetPackageResolver packageResolver = NuGetPackageResolver.CreateResolver(PackageFolders, ProjectPath);

                var updatedItems = new List<ITaskItem>();

                foreach (var item in Items)
                {
                    string packageName = item.GetMetadata(MetadataKeys.PackageName);
                    string packageVersion = item.GetMetadata(MetadataKeys.PackageVersion);
                    if (!string.IsNullOrEmpty(packageName) && !string.IsNullOrEmpty(packageVersion)
                        && string.IsNullOrEmpty(item.GetMetadata(MetadataKeys.PackageDirectory)))
                    {
                        var newItem = new TaskItem(item);

                        //  Gracefully handle case where we don't have a packageResolver because we don't have an assets
                        //  file, which happens for design-time builds
                        if (packageResolver != null)
                        {
                            var parsedPackageVersion = NuGetVersion.Parse(packageVersion);

                            string packageDirectory = packageResolver.GetPackageDirectory(packageName, parsedPackageVersion);
                            
                            newItem.SetMetadata(MetadataKeys.PackageDirectory, packageDirectory);
                        }

                        updatedItems.Add(newItem);
                    }
                    else
                    {
                        updatedItems.Add(item);
                    }
                }

                Output = updatedItems.ToArray();
            }
        }