Browse Source

Latest version check added (disabled). (Temp) Fixed DirectoryExists for ReferencePaths (see https://github.com/natemcmaster/CommandLineUtils/issues/536)

pull/3035/head
Christoph Wille 2 years ago
parent
commit
bf91f463f9
  1. 51
      ICSharpCode.ILSpyCmd/DotNetToolUpdateChecker.cs
  2. 1
      ICSharpCode.ILSpyCmd/ICSharpCode.ILSpyCmd.csproj
  3. 12
      ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs

51
ICSharpCode.ILSpyCmd/DotNetToolUpdateChecker.cs

@ -0,0 +1,51 @@ @@ -0,0 +1,51 @@
using System;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using NuGet.Common;
using NuGet.Protocol;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
namespace ICSharpCode.ILSpyCmd
{
// Idea from https://github.com/ErikEJ/EFCorePowerTools/blob/master/src/GUI/efcpt/Services/PackageService.cs
internal static class DotNetToolUpdateChecker
{
static NuGetVersion CurrentPackageVersion()
{
return new NuGetVersion(Assembly.GetEntryAssembly()!.GetCustomAttribute<AssemblyInformationalVersionAttribute>()!
.InformationalVersion);
}
public static async Task CheckForPackageUpdateAsync(string packageId)
{
try
{
using var cache = new SourceCacheContext();
var repository = Repository.Factory.GetCoreV3("https://api.nuget.org/v3/index.json");
var resource = await repository.GetResourceAsync<FindPackageByIdResource>().ConfigureAwait(false);
var versions = await resource.GetAllVersionsAsync(
packageId,
cache,
new NullLogger(),
CancellationToken.None).ConfigureAwait(false);
var latestVersion = versions.Where(v => v.Release == "").MaxBy(v => v);
if (latestVersion > CurrentPackageVersion())
{
Console.WriteLine("You are not using the latest version of the tool, please update.");
Console.WriteLine($"Latest version is '{latestVersion}'");
}
}
#pragma warning disable RCS1075 // Avoid empty catch clause that catches System.Exception.
catch (Exception)
{
}
#pragma warning restore RCS1075 // Avoid empty catch clause that catches System.Exception.
}
}
}

1
ICSharpCode.ILSpyCmd/ICSharpCode.ILSpyCmd.csproj

@ -51,6 +51,7 @@ @@ -51,6 +51,7 @@
<ItemGroup>
<PackageReference Include=" McMaster.Extensions.Hosting.CommandLine" Version="4.0.2" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
<PackageReference Include="NuGet.Protocol" Version="6.6.1" />
</ItemGroup>
<Target Name="ILSpyUpdateAssemblyInfo" AfterTargets="ResolveProjectReferences">

12
ICSharpCode.ILSpyCmd/IlspyCmdProgram.cs

@ -51,6 +51,8 @@ Examples: @@ -51,6 +51,8 @@ Examples:
MemberName = nameof(DecompilerVersion))]
class ILSpyCmdProgram
{
// https://natemcmaster.github.io/CommandLineUtils/docs/advanced/generic-host.html
// https://github.com/natemcmaster/CommandLineUtils/blob/main/docs/samples/dependency-injection/generic-host/Program.cs
public static Task<int> Main(string[] args) => new HostBuilder().RunCommandLineApplicationAsync<ILSpyCmdProgram>(args);
[FilesExist]
@ -95,7 +97,7 @@ Examples: @@ -95,7 +97,7 @@ Examples:
[DirectoryExists]
[Option("-r|--referencepath <path>", "Path to a directory containing dependencies of the assembly that is being decompiled.", CommandOptionType.MultipleValue)]
public string[] ReferencePaths { get; } = new string[0];
public string[] ReferencePaths { get; }
[Option("--no-dead-code", "Remove dead code.", CommandOptionType.NoValue)]
public bool RemoveDeadCode { get; }
@ -103,7 +105,7 @@ Examples: @@ -103,7 +105,7 @@ Examples:
[Option("--no-dead-stores", "Remove dead stores.", CommandOptionType.NoValue)]
public bool RemoveDeadStores { get; }
[Option("-d|--dump-package", "Dump package assembiles into a folder. This requires the output directory option.", CommandOptionType.NoValue)]
[Option("-d|--dump-package", "Dump package assemblies into a folder. This requires the output directory option.", CommandOptionType.NoValue)]
public bool DumpPackageFlag { get; }
[Option("--nested-directories", "Use nested directories for namespaces.", CommandOptionType.NoValue)]
@ -117,6 +119,8 @@ Examples: @@ -117,6 +119,8 @@ Examples:
private Task<int> OnExecuteAsync(CommandLineApplication app)
{
// await DotNetToolUpdateChecker.CheckForPackageUpdateAsync("ilspycmd");
TextWriter output = System.Console.Out;
string outputDirectory = ResolveOutputDirectory(OutputDirectory);
@ -249,7 +253,7 @@ Examples: @@ -249,7 +253,7 @@ Examples:
{
var module = new PEFile(assemblyFileName);
var resolver = new UniversalAssemblyResolver(assemblyFileName, false, module.Metadata.DetectTargetFrameworkId());
foreach (var path in ReferencePaths)
foreach (var path in (ReferencePaths ?? Array.Empty<string>()))
{
resolver.AddSearchDirectory(path);
}
@ -287,7 +291,7 @@ Examples: @@ -287,7 +291,7 @@ Examples:
{
var module = new PEFile(assemblyFileName);
var resolver = new UniversalAssemblyResolver(assemblyFileName, false, module.Metadata.DetectTargetFrameworkId());
foreach (var path in ReferencePaths)
foreach (var path in (ReferencePaths ?? Array.Empty<string>()))
{
resolver.AddSearchDirectory(path);
}

Loading…
Cancel
Save