Skip to content

Upgraded to be compatible with .Net 7.0 #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/Weikio.NugetDownloader/ConsoleLogger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ public override void Log(ILogMessage message)
case LogLevel.Error:
Console.WriteLine($"ERROR - {message}");
break;

default:
throw new ArgumentOutOfRangeException();
}
}

Expand Down
11 changes: 7 additions & 4 deletions src/Weikio.NugetDownloader/FolderProjectContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@ public FolderProjectContext(ILogger logger)
_logger = logger;
}

public ExecutionContext ExecutionContext => null;
public ExecutionContext? ExecutionContext => null;

public PackageExtractionContext PackageExtractionContext { get; set; }
public PackageExtractionContext PackageExtractionContext { get; set; } = null!;

public XDocument OriginalPackagesConfig { get; set; }
public XDocument? OriginalPackagesConfig { get; set; }

public ISourceControlManagerProvider SourceControlManagerProvider => null;
public ISourceControlManagerProvider? SourceControlManagerProvider => null;

public void Log(MessageLevel level, string message, params object[] args)
{
Expand All @@ -48,6 +48,9 @@ public void Log(MessageLevel level, string message, params object[] args)
case MessageLevel.Error:
_logger.LogError(message);
break;

default:
throw new ArgumentOutOfRangeException(nameof(level), level, null);
}
}

Expand Down
7 changes: 7 additions & 0 deletions src/Weikio.NugetDownloader/IsExternalInit.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace System.Runtime.CompilerServices
{
public class IsExternalInit
{

}
}
8 changes: 4 additions & 4 deletions src/Weikio.NugetDownloader/NuGetFeed.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@ public class NuGetFeed
{
public string Name { get; }

public string Feed { get; }
public string? Feed { get; }

public NuGetFeed(string name, string feed = null)
public NuGetFeed(string name, string? feed = null)
{
Name = name;
Feed = feed;
}

public string Username { get; set; }
public string? Username { get; set; }

public string Password { get; set; }
public string? Password { get; set; }
}
}
134 changes: 42 additions & 92 deletions src/Weikio.NugetDownloader/NugetDownloader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NuGet.Common;
using NuGet.Configuration;
using NuGet.Frameworks;
Expand All @@ -26,63 +25,16 @@ public class NuGetDownloader
{
private readonly ILogger _logger;

public NuGetDownloader(ILogger logger = null)
public NuGetDownloader(ILogger? logger = null)
{
_logger = logger ?? new ConsoleLogger();
}

public async Task<NugetDownloadResult> DownloadAsync(
string packageFolder,
string packageName,
string packageVersion = null,
public async Task<NugetDownloadResult> DownloadAsync(string packageFolder, string packageName, string? packageVersion = null,
bool includePrerelease = false,
NuGetFeed packageFeed = null,
bool onlyDownload = false,
bool includeSecondaryRepositories = false,
string targetFramework = null,
string targetRid = null,
bool filterOurRefFiles = true)
{
return await DownloadAsync(
packageFolder,
packageName,
packageVersion,
includePrerelease,
packageFeed,
onlyDownload,
includeSecondaryRepositories,
targetFramework,
targetRid,
filterOurRefFiles,
null);
}

public async Task<NugetDownloadResult> DownloadAsync(string packageFolder, string packageName, string packageVersion = null,
bool includePrerelease = false,
NuGetFeed packageFeed = null, bool onlyDownload = false, bool includeSecondaryRepositories = false, string targetFramework = null,
string targetRid = null,
bool filterOurRefFiles = true, List<string> ignoredSources = null)
{
return await DownloadAsync(
packageFolder,
packageName,
packageVersion,
includePrerelease,
packageFeed,
onlyDownload,
includeSecondaryRepositories,
targetFramework,
targetRid,
filterOurRefFiles,
null,
false);
}

public async Task<NugetDownloadResult> DownloadAsync(string packageFolder, string packageName, string packageVersion = null,
bool includePrerelease = false,
NuGetFeed packageFeed = null, bool onlyDownload = false, bool includeSecondaryRepositories = false, string targetFramework = null,
string targetRid = null,
bool filterOurRefFiles = true, List<string> ignoredSources = null, bool autoRetryOnFail = false)
NuGetFeed? packageFeed = null, bool onlyDownload = false, bool includeSecondaryRepositories = false, string? targetFramework = null,
string? targetRid = null,
bool filterOurRefFiles = true, List<string>? ignoredSources = null, bool autoRetryOnFail = false)
{
if (!Directory.Exists(packageFolder))
{
Expand All @@ -94,13 +46,10 @@ public async Task<NugetDownloadResult> DownloadAsync(string packageFolder, strin
var packageSourceProvider = new PackageSourceProvider(settings);
var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, providers);

IPackageSearchMetadata package = null;
SourceRepository sourceRepo = null;

var packageResult = await GetPackage(packageName, packageVersion, includePrerelease, packageFeed, providers, sourceRepositoryProvider, false);

package = packageResult.Item2;
sourceRepo = packageResult.Item1;
var package = packageResult.Item2;
var sourceRepo = packageResult.Item1;

if (package == null)
{
Expand All @@ -121,7 +70,7 @@ public async Task<NugetDownloadResult> DownloadAsync(string packageFolder, strin
if (string.IsNullOrWhiteSpace(targetFramework))
{
targetFramework = Assembly
.GetEntryAssembly()
.GetEntryAssembly()?
.GetCustomAttribute<TargetFrameworkAttribute>()?
.FrameworkName;
}
Expand Down Expand Up @@ -183,36 +132,38 @@ await packageManager.InstallPackageAsync(
await project.PreProcessAsync(projectContext, CancellationToken.None);
await packageManager.RestorePackageAsync(package.Identity, projectContext, downloadContext, new[] { sourceRepo }, CancellationToken.None);

var result = new NugetDownloadResult
{
Context = new NugetContext(nuGetFramework.ToString(), nuGetFramework.GetShortFolderName(), nuGetFramework.Version.ToString(), packageFolder,
packageName, packageVersion, project.Rid, project.SupportedRids)
};
var context = new NugetContext(nuGetFramework.ToString(), nuGetFramework.GetShortFolderName(), nuGetFramework.Version.ToString(), packageFolder,
packageName, packageVersion, project.Rid, project.SupportedRids);

if (onlyDownload)
{
var versionFolder = Path.Combine(packageFolder, package.Identity.ToString());

result.PackageAssemblyFiles = new List<string>(Directory.GetFiles(versionFolder, "*.*", SearchOption.AllDirectories));

return result;
return new NugetDownloadResult
{
Context = context,
PackageAssemblyFiles = new List<string>(Directory.GetFiles(versionFolder, "*.*", SearchOption.AllDirectories))
};
}

result.InstalledDlls = new List<DllInfo>(project.InstalledDlls);
result.RunTimeDlls = new List<RunTimeDll>(project.RuntimeDlls);
result.InstalledPackages = new List<string>(project.InstalledPackages);

var packageAssemblies = await project.GetPluginAssemblyFilesAsync();
result.PackageAssemblyFiles = new List<string>(packageAssemblies);

return result;
return new NugetDownloadResult
{
Context = context,
PackageAssemblyFiles = new List<string>(packageAssemblies),
RunTimeDlls = new List<RunTimeDll>(project.RuntimeDlls),
InstalledDlls = new List<DllInfo>(project.InstalledDlls),
InstalledPackages = new List<string>(project.InstalledPackages)
};
}

private async Task<(SourceRepository, IPackageSearchMetadata)> GetPackage(string packageName, string packageVersion, bool includePrerelease, NuGetFeed packageFeed, List<Lazy<INuGetResourceProvider>> providers,
private async Task<(SourceRepository?, IPackageSearchMetadata?)> GetPackage(
string packageName, string? packageVersion, bool includePrerelease, NuGetFeed? packageFeed, List<Lazy<INuGetResourceProvider>> providers,
SourceRepositoryProvider sourceRepositoryProvider, bool forceRefresh)
{
IPackageSearchMetadata package = null;
SourceRepository sourceRepo = null;
IPackageSearchMetadata? package = null;
SourceRepository? sourceRepo = null;

if (!string.IsNullOrWhiteSpace(packageFeed?.Feed))
{
Expand Down Expand Up @@ -257,7 +208,7 @@ public async Task<string[]> DownloadAsync(IPackageSearchMetadata packageIdentity
var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, providers);

var dotNetFramework = Assembly
.GetEntryAssembly()
.GetEntryAssembly()?
.GetCustomAttribute<TargetFrameworkAttribute>()?
.FrameworkName;

Expand Down Expand Up @@ -318,15 +269,14 @@ private static List<Lazy<INuGetResourceProvider>> GetNugetResourceProviders()

private static SourceRepository GetSourceRepo(NuGetFeed packageFeed, List<Lazy<INuGetResourceProvider>> providers)
{
SourceRepository sourceRepo;
var packageSource = new PackageSource(packageFeed.Feed);

if (!string.IsNullOrWhiteSpace(packageFeed.Username))
{
packageSource.Credentials = new PackageSourceCredential(packageFeed.Name, packageFeed.Username, packageFeed.Password, true, null);
}

sourceRepo = new SourceRepository(packageSource, providers);
var sourceRepo = new SourceRepository(packageSource, providers);

return sourceRepo;
}
Expand Down Expand Up @@ -409,7 +359,7 @@ private static SourceRepository GetSourceRepo(NuGetFeed packageFeed, List<Lazy<I
return packages.Select(x => (sourceRepo, x));
}

private async Task<IPackageSearchMetadata> SearchPackageAsync(string packageName, string version, bool includePrerelease,
private async Task<IPackageSearchMetadata?> SearchPackageAsync(string? packageName, string? version, bool includePrerelease,
SourceRepository sourceRepository, bool forceRefresh)
{
var packageMetadataResource = await sourceRepository.GetResourceAsync<PackageMetadataResource>();
Expand All @@ -420,11 +370,11 @@ private async Task<IPackageSearchMetadata> SearchPackageAsync(string packageName
sourceCacheContext = sourceCacheContext.WithRefreshCacheTrue();
}

IPackageSearchMetadata packageMetaData = null;
IPackageSearchMetadata? packageMetaData = null;

if (!string.IsNullOrEmpty(version) && !version.Contains('*'))
{
if (NuGetVersion.TryParse(version, out var nugetversion))
if (NuGetVersion.TryParse(version, out _))
{
var packageIdentity = new PackageIdentity(packageName, NuGetVersion.Parse(version));

Expand Down Expand Up @@ -461,28 +411,28 @@ private async Task<IPackageSearchMetadata> SearchPackageAsync(string packageName
}
}

public class NugetDownloadResult
public record NugetDownloadResult
{
public NugetContext Context { get; set; }
public List<string> PackageAssemblyFiles { get; set; }
public List<RunTimeDll> RunTimeDlls { get; set; }
public List<DllInfo> InstalledDlls { get; set; }
public List<string> InstalledPackages { get; set; }
public NugetContext Context { get; init; } = null!;
public List<string> PackageAssemblyFiles { get; init; } = null!;
public List<RunTimeDll>? RunTimeDlls { get; init; }
public List<DllInfo>? InstalledDlls { get; init; }
public List<string>? InstalledPackages { get; init; }
}

public class NugetContext
{
public string TargetFramework { get; }
public string TargetFrameworkShortName { get; }
public string TargetVersion { get; }
public string Rid { get; set; }
public List<string> SupportedRids { get; set; }
public string? Rid { get; }
public List<string> SupportedRids { get; }
public string Folder { get; }
public string PackageName { get; }
public string PackageVersion { get; }
public string? PackageVersion { get; }

public NugetContext(string targetFramework, string targetFrameworkShortName, string targetVersion, string folder, string packageName,
string packageVersion, string rid, List<string> supportedRids)
string? packageVersion, string? rid, List<string> supportedRids)
{
TargetFramework = targetFramework;
TargetFrameworkShortName = targetFrameworkShortName;
Expand Down
Loading