benjaminvr

Untitled

Jan 4th, 2023
977
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.32 KB | None | 0 0
  1. using Microsoft.Build.Framework;
  2. using Microsoft.Build.Utilities;
  3. using NuGet.Configuration;
  4. using NuGet.Packaging;
  5. using NuGet.Packaging.Core;
  6. using NuGet.Protocol;
  7. using NuGet.Protocol.Core.Types;
  8. using System.IO;
  9.  
  10. namespace MyProject
  11. {
  12.     public class CopyFileFromNuGetPackage : Task
  13.     {
  14.         [Required]
  15.         public string PackageId { get; set; }
  16.  
  17.         [Required]
  18.         public string PackageVersion { get; set; }
  19.  
  20.         [Required]
  21.         public string SourceFilePath { get; set; }
  22.  
  23.         [Required]
  24.         public string DestinationFilePath { get; set; }
  25.  
  26.         public override bool Execute()
  27.         {
  28.             var packageIdentity = new PackageIdentity(PackageId, NuGetVersion.Parse(PackageVersion));
  29.             var packageSource = new PackageSource("https://api.nuget.org/v3/index.json");
  30.             var packageDownloadContext = new PackageDownloadContext(packageSource, null, false, null, NullLogger.Instance);
  31.             var packageExtractionContext = new PackageExtractionContext(
  32.                 PackageSaveMode.Defaultv3,
  33.                 XmlDocFileSaveMode.None,
  34.                 ClientPolicyContext.GetClientPolicy(NullLogger.Instance, null),
  35.                 NullLogger.Instance);
  36.  
  37.             using (var sourceCacheContext = new SourceCacheContext())
  38.             {
  39.                 var packageSourceProvider = new PackageSourceProvider(Settings.LoadDefaultSettings(null), new[] { packageSource });
  40.                 var packageMetadataResource = Repository.Provider.GetCoreV3().GetResource<PackageMetadataResource>();
  41.                 var packageMetadata = packageMetadataResource.GetMetadata(packageIdentity, sourceCacheContext, NullLogger.Instance, packageSourceProvider);
  42.                 var packageDownloadResource = Repository.Provider.GetCoreV3().GetResource<PackageDownloadResource>();
  43.                 var packageStream = packageDownloadResource.GetStream(packageIdentity, packageDownloadContext);
  44.                 var packageReader = new PackageReader(packageStream);
  45.  
  46.                 var fileStream = packageReader.GetFile(SourceFilePath);
  47.                 using (var destinationStream = File.Create(DestinationFilePath))
  48.                 {
  49.                     fileStream.CopyTo(destinationStream);
  50.                 }
  51.             }
  52.  
  53.             return true;
  54.         }
  55.     }
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment