in tools/nuget2bazel/ProjectBazelManipulator.cs [137:188]
public override async Task<bool> InstallPackageAsync(
PackageIdentity packageIdentity,
DownloadResourceResult downloadResourceResult,
INuGetProjectContext nuGetProjectContext,
CancellationToken token)
{
var dependency = new PackageDependency(packageIdentity.Id, new VersionRange(packageIdentity.Version));
var json = await GetJsonAsync();
json.dependencies.Add(packageIdentity.Id, packageIdentity.Version.ToString());
await SaveJsonAsync(json);
var packageReader = downloadResourceResult.PackageReader
?? new PackageArchiveReader(downloadResourceResult.PackageStream, leaveStreamOpen: true);
IAsyncPackageContentReader packageContentReader = packageReader;
IAsyncPackageCoreReader packageCoreReader = packageReader;
var libItemGroups = await packageContentReader.GetLibItemsAsync(token);
var referenceItemGroups = await packageContentReader.GetReferenceItemsAsync(token);
var frameworkReferenceGroups = await packageContentReader.GetFrameworkItemsAsync(token);
var contentFileGroups = await packageContentReader.GetContentItemsAsync(token);
var buildFileGroups = await packageContentReader.GetBuildItemsAsync(token);
var toolItemGroups = await packageContentReader.GetToolItemsAsync(token);
var depsGroups = await packageContentReader.GetPackageDependenciesAsync(token);
// Very ugly hack to extract build folder and runtimes folder content
// Unfortunately, the original implementation only returns .prop and .targets files.
var readerBase = (PackageReaderBase)packageContentReader;
var dynMethod = readerBase.GetType().BaseType.GetMethod("GetFileGroups", BindingFlags.NonPublic | BindingFlags.Instance);
var allBuildFileGroups = (IEnumerable<FrameworkSpecificGroup>)dynMethod.Invoke(readerBase, new object?[] { "build" });
var allRuntimes = (IEnumerable<FrameworkSpecificGroup>)dynMethod.Invoke(readerBase, new object?[] { "runtimes" });
IEnumerable<FrameworkSpecificGroup> refItemGroups = null;
if (packageReader is PackageArchiveReader reader)
refItemGroups = await reader.GetItemsAsync(PackagingConstants.Folders.Ref, token);
else if (packageReader is PackageFolderReader reader2)
refItemGroups = await reader2.GetItemsAsync(PackagingConstants.Folders.Ref, token);
var sha256 = "";
if (!_skipSha256)
{
sha256 = GetSha(downloadResourceResult.PackageStream);
}
var entry = new WorkspaceEntry(json.dependencies, packageIdentity, sha256,
depsGroups, libItemGroups, toolItemGroups, refItemGroups, allBuildFileGroups, allRuntimes, _mainFile, _variable, _nugetSourceCustom);
_entries.Add(packageIdentity, entry);
await AddEntry(entry);
return await base.InstallPackageAsync(packageIdentity, downloadResourceResult, nuGetProjectContext, token);
}