diff --git a/src/Weikio.NugetDownloader/ConsoleLogger.cs b/src/Weikio.NugetDownloader/ConsoleLogger.cs index 95ce8f2..75cbc58 100644 --- a/src/Weikio.NugetDownloader/ConsoleLogger.cs +++ b/src/Weikio.NugetDownloader/ConsoleLogger.cs @@ -33,6 +33,9 @@ public override void Log(ILogMessage message) case LogLevel.Error: Console.WriteLine($"ERROR - {message}"); break; + + default: + throw new ArgumentOutOfRangeException(); } } diff --git a/src/Weikio.NugetDownloader/FolderProjectContext.cs b/src/Weikio.NugetDownloader/FolderProjectContext.cs index a6a5c6a..becf4b2 100644 --- a/src/Weikio.NugetDownloader/FolderProjectContext.cs +++ b/src/Weikio.NugetDownloader/FolderProjectContext.cs @@ -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) { @@ -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); } } diff --git a/src/Weikio.NugetDownloader/IsExternalInit.cs b/src/Weikio.NugetDownloader/IsExternalInit.cs new file mode 100644 index 0000000..c76dbf1 --- /dev/null +++ b/src/Weikio.NugetDownloader/IsExternalInit.cs @@ -0,0 +1,7 @@ +namespace System.Runtime.CompilerServices +{ + public class IsExternalInit + { + + } +} diff --git a/src/Weikio.NugetDownloader/NuGetFeed.cs b/src/Weikio.NugetDownloader/NuGetFeed.cs index 0e956eb..b8facf8 100644 --- a/src/Weikio.NugetDownloader/NuGetFeed.cs +++ b/src/Weikio.NugetDownloader/NuGetFeed.cs @@ -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; } } } diff --git a/src/Weikio.NugetDownloader/NugetDownloader.cs b/src/Weikio.NugetDownloader/NugetDownloader.cs index d3550f4..0f65d93 100644 --- a/src/Weikio.NugetDownloader/NugetDownloader.cs +++ b/src/Weikio.NugetDownloader/NugetDownloader.cs @@ -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; @@ -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 DownloadAsync( - string packageFolder, - string packageName, - string packageVersion = null, + public async Task 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 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 ignoredSources = null) - { - return await DownloadAsync( - packageFolder, - packageName, - packageVersion, - includePrerelease, - packageFeed, - onlyDownload, - includeSecondaryRepositories, - targetFramework, - targetRid, - filterOurRefFiles, - null, - false); - } - - public async Task 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 ignoredSources = null, bool autoRetryOnFail = false) + NuGetFeed? packageFeed = null, bool onlyDownload = false, bool includeSecondaryRepositories = false, string? targetFramework = null, + string? targetRid = null, + bool filterOurRefFiles = true, List? ignoredSources = null, bool autoRetryOnFail = false) { if (!Directory.Exists(packageFolder)) { @@ -94,13 +46,10 @@ public async Task 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) { @@ -121,7 +70,7 @@ public async Task DownloadAsync(string packageFolder, strin if (string.IsNullOrWhiteSpace(targetFramework)) { targetFramework = Assembly - .GetEntryAssembly() + .GetEntryAssembly()? .GetCustomAttribute()? .FrameworkName; } @@ -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(Directory.GetFiles(versionFolder, "*.*", SearchOption.AllDirectories)); - - return result; + return new NugetDownloadResult + { + Context = context, + PackageAssemblyFiles = new List(Directory.GetFiles(versionFolder, "*.*", SearchOption.AllDirectories)) + }; } - result.InstalledDlls = new List(project.InstalledDlls); - result.RunTimeDlls = new List(project.RuntimeDlls); - result.InstalledPackages = new List(project.InstalledPackages); - var packageAssemblies = await project.GetPluginAssemblyFilesAsync(); - result.PackageAssemblyFiles = new List(packageAssemblies); - return result; + return new NugetDownloadResult + { + Context = context, + PackageAssemblyFiles = new List(packageAssemblies), + RunTimeDlls = new List(project.RuntimeDlls), + InstalledDlls = new List(project.InstalledDlls), + InstalledPackages = new List(project.InstalledPackages) + }; } - private async Task<(SourceRepository, IPackageSearchMetadata)> GetPackage(string packageName, string packageVersion, bool includePrerelease, NuGetFeed packageFeed, List> providers, + private async Task<(SourceRepository?, IPackageSearchMetadata?)> GetPackage( + string packageName, string? packageVersion, bool includePrerelease, NuGetFeed? packageFeed, List> providers, SourceRepositoryProvider sourceRepositoryProvider, bool forceRefresh) { - IPackageSearchMetadata package = null; - SourceRepository sourceRepo = null; + IPackageSearchMetadata? package = null; + SourceRepository? sourceRepo = null; if (!string.IsNullOrWhiteSpace(packageFeed?.Feed)) { @@ -257,7 +208,7 @@ public async Task DownloadAsync(IPackageSearchMetadata packageIdentity var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, providers); var dotNetFramework = Assembly - .GetEntryAssembly() + .GetEntryAssembly()? .GetCustomAttribute()? .FrameworkName; @@ -318,7 +269,6 @@ private static List> GetNugetResourceProviders() private static SourceRepository GetSourceRepo(NuGetFeed packageFeed, List> providers) { - SourceRepository sourceRepo; var packageSource = new PackageSource(packageFeed.Feed); if (!string.IsNullOrWhiteSpace(packageFeed.Username)) @@ -326,7 +276,7 @@ private static SourceRepository GetSourceRepo(NuGetFeed packageFeed, List (sourceRepo, x)); } - private async Task SearchPackageAsync(string packageName, string version, bool includePrerelease, + private async Task SearchPackageAsync(string? packageName, string? version, bool includePrerelease, SourceRepository sourceRepository, bool forceRefresh) { var packageMetadataResource = await sourceRepository.GetResourceAsync(); @@ -420,11 +370,11 @@ private async Task 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)); @@ -461,13 +411,13 @@ private async Task SearchPackageAsync(string packageName } } - public class NugetDownloadResult + public record NugetDownloadResult { - public NugetContext Context { get; set; } - public List PackageAssemblyFiles { get; set; } - public List RunTimeDlls { get; set; } - public List InstalledDlls { get; set; } - public List InstalledPackages { get; set; } + public NugetContext Context { get; init; } = null!; + public List PackageAssemblyFiles { get; init; } = null!; + public List? RunTimeDlls { get; init; } + public List? InstalledDlls { get; init; } + public List? InstalledPackages { get; init; } } public class NugetContext @@ -475,14 +425,14 @@ public class NugetContext public string TargetFramework { get; } public string TargetFrameworkShortName { get; } public string TargetVersion { get; } - public string Rid { get; set; } - public List SupportedRids { get; set; } + public string? Rid { get; } + public List 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 supportedRids) + string? packageVersion, string? rid, List supportedRids) { TargetFramework = targetFramework; TargetFrameworkShortName = targetFrameworkShortName; diff --git a/src/Weikio.NugetDownloader/PluginFolderNugetProject.cs b/src/Weikio.NugetDownloader/PluginFolderNugetProject.cs index 29703fb..46fce90 100644 --- a/src/Weikio.NugetDownloader/PluginFolderNugetProject.cs +++ b/src/Weikio.NugetDownloader/PluginFolderNugetProject.cs @@ -23,17 +23,17 @@ public class PluginFolderNugetProject : FolderNuGetProject private readonly NuGetFramework _targetFramework; private readonly bool _onlyDownload; private readonly bool _filterOurRefFiles; - private CompatibilityProvider _compProvider; - private FrameworkReducer _reducer; + private readonly CompatibilityProvider _compProvider; + private readonly FrameworkReducer _reducer; - public string Rid { get; set; } + public string? Rid { get; set; } public List SupportedRids { get; } public List InstalledDlls { get; } = new List(); public List RuntimeDlls { get; } = new List(); public List InstalledPackages { get; } = new List(); public PluginFolderNugetProject(string root, IPackageSearchMetadata pluginNuGetPackage, NuGetFramework targetFramework, bool onlyDownload = false, - string targetRid = null, bool filterOurRefFiles = true) : + string? targetRid = null, bool filterOurRefFiles = true) : base(root, new PackagePathResolver(root), targetFramework) { _root = root; @@ -64,14 +64,13 @@ public override async Task InstallPackageAsync(PackageIdentity packageIden InstalledPackages.Add(packageIdentity.ToString()); - using (var zipArchive = new ZipArchive(downloadResourceResult.PackageStream)) - { - var zipArchiveEntries = zipArchive.Entries - .Where(e => e.Name.EndsWith(".dll") || e.Name.EndsWith(".exe")).ToList(); + using var zipArchive = new ZipArchive(downloadResourceResult.PackageStream); - await HandleManagedDlls(packageIdentity, zipArchiveEntries); - HandleRuntimeDlls(packageIdentity, zipArchiveEntries); - } + var zipArchiveEntries = zipArchive.Entries + .Where(e => e.Name.EndsWith(".dll") || e.Name.EndsWith(".exe")).ToList(); + + await HandleManagedDlls(packageIdentity, zipArchiveEntries); + HandleRuntimeDlls(packageIdentity, zipArchiveEntries); return result; } @@ -84,20 +83,19 @@ private void HandleRuntimeDlls(PackageIdentity packageIdentity, List GetSupportedRids(string targetRid) + private List GetSupportedRids(string? targetRid) { Rid = string.IsNullOrWhiteSpace(targetRid) ? Microsoft.DotNet.PlatformAbstractions.RuntimeEnvironment.GetRuntimeIdentifier() : targetRid; var dependencyContext = DependencyContext.Default; - var fallbacks = dependencyContext.RuntimeGraph.Single(x => + var fallbacks = dependencyContext?.RuntimeGraph.Single(x => string.Equals(x.Runtime, Rid, StringComparison.InvariantCultureIgnoreCase)); var result = new List { Rid }; - - foreach (var runtimeFallback in fallbacks.Fallbacks) - { - result.Add(runtimeFallback); - } + result.AddRange((fallbacks?.Fallbacks ?? Array.Empty())!); return result; } @@ -274,24 +268,24 @@ public override async Task UninstallPackageAsync(PackageIdentity packageId } } - public class DllInfo + public record DllInfo { - public string PackageIdentity { get; set; } - public string FileName { get; set; } - public string RelativeFilePath { get; set; } - public string FullFilePath { get; set; } - public string TargetFrameworkName { get; set; } - public string TargetFrameworkShortName { get; set; } - public string TargetVersion { get; set; } + public string PackageIdentity { get; init; } = null!; + public string FileName { get; init; } = null!; + public string RelativeFilePath { get; init; } = null!; + public string FullFilePath { get; init; } = null!; + public string TargetFrameworkName { get; init; } = null!; + public string TargetFrameworkShortName { get; init; } = null!; + public string TargetVersion { get; init; } = null!; } public class RunTimeDll { - public string PackageIdentity { get; set; } - public string FileName { get; set; } - public string RelativeFilePath { get; set; } - public string FullFilePath { get; set; } - public string RID { get; set; } + public string PackageIdentity { get; init; } = null!; + public string FileName { get; init; } = null!; + public string RelativeFilePath { get; init; } = null!; + public string FullFilePath { get; init; } = null!; + public string RID { get; init; } = null!; public bool IsNative { @@ -309,9 +303,9 @@ public bool IsLib } } - public string TargetFramework { get; set; } - public string TargetFrameworkShortName { get; set; } - public string TargetVersion { get; set; } + public string TargetFramework { get; init; } = null!; + public string? TargetFrameworkShortName { get; init; } + public string? TargetVersion { get; set; } public bool IsSupported { get; set; } public bool IsRecommended { get; set; } } diff --git a/src/Weikio.NugetDownloader/Weikio.NugetDownloader.csproj b/src/Weikio.NugetDownloader/Weikio.NugetDownloader.csproj index cf3a410..dcd126f 100644 --- a/src/Weikio.NugetDownloader/Weikio.NugetDownloader.csproj +++ b/src/Weikio.NugetDownloader/Weikio.NugetDownloader.csproj @@ -1,7 +1,11 @@ - netcoreapp3.1;net6.0 + true + + + + netcoreapp3.1;net6.0;net7.0 true true Tool for downloading and installing NuGet packages from .NET. @@ -13,16 +17,19 @@ NuGet Downloader https://github.com/weikio/NugetDownloader https://github.com/weikio/NugetDownloader + 11 + enable - - - - - - + + + + + + +