Skip to content
Merged
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
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,8 @@ packages/
gh-pages/

.idea/
**/*out*
**/*out*

# Local CI artifacts
test-results/
coverage/
3 changes: 3 additions & 0 deletions Confuser.CLI/Confuser.CLI.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@

<ItemGroup Label="Nuget Dependencies">
<PackageReference Include="NDesk.Options.Core" Version="1.2.5" />
<PackageReference Include="Serilog" Version="4.*" />
<PackageReference Include="Serilog.Extensions.Logging" Version="9.*" />
<PackageReference Include="Serilog.Sinks.Console" Version="6.*" />
</ItemGroup>

<ItemGroup Label="Project Dependencies">
Expand Down
93 changes: 42 additions & 51 deletions Confuser.CLI/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
using System.Xml;
using Confuser.Core;
using Confuser.Core.Project;
using Microsoft.Extensions.Logging;
using NDesk.Options;
using Serilog;
using Serilog.Events;

namespace Confuser.CLI {
internal class Program {
Expand All @@ -21,6 +24,8 @@ static int Main(string[] args) {
try {
bool noPause = false;
bool debug = false;
bool quiet = false;
int verbosity = 0;
string outDir = null;
string snKeyPath = null;
string snKeyPass = null;
Expand Down Expand Up @@ -48,6 +53,12 @@ static int Main(string[] args) {
}, {
"snkeypass=", "specifies strong name key password.",
value => { snKeyPass = value; }
}, {
"v|verbose", "increase verbosity (repeat for more: -v, -vv, -vvv).",
value => { verbosity++; }
}, {
"q|quiet", "only show warnings and errors.",
value => { quiet = (value != null); }
}
};

Expand Down Expand Up @@ -130,7 +141,7 @@ static int Main(string[] args) {
parameters.Project = proj;
}

int retVal = RunProject(parameters);
int retVal = RunProject(parameters, quiet, verbosity);

if (NeedPause() && !noPause) {
Console.WriteLine("Press any key to continue...");
Expand Down Expand Up @@ -192,14 +203,34 @@ static void LoadTemplateProject(string templatePath, ConfuserProject proj, List<
templateModules.Add(templateModule);
}

static int RunProject(ConfuserParameters parameters) {
var logger = new ConsoleLogger();
parameters.Logger = logger;

Console.Title = "ConfuserEx - Running...";
static int RunProject(ConfuserParameters parameters, bool quiet, int verbosity) {
var levelSwitch = quiet
? LogEventLevel.Warning
: verbosity >= 3 ? LogEventLevel.Verbose
: verbosity >= 2 ? LogEventLevel.Verbose
: verbosity >= 1 ? LogEventLevel.Debug
: LogEventLevel.Information;

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Is(levelSwitch)
.WriteTo.Console(
outputTemplate: "[{Level:u4}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();

using var loggerFactory = LoggerFactory.Create(builder =>
builder.AddSerilog(dispose: false));
var melLogger = loggerFactory.CreateLogger("ConfuserEx");

var progressReporter = new ConsoleProgressReporter();
parameters.Logger = melLogger;
parameters.ProgressReporter = progressReporter;

if (OperatingSystem.IsWindows())
Console.Title = "ConfuserEx - Running...";
ConfuserEngine.Run(parameters).GetAwaiter().GetResult();

return logger.ReturnValue;
Log.CloseAndFlush();
return progressReporter.ReturnValue;
}

static bool NeedPause() {
Expand All @@ -217,6 +248,8 @@ static void PrintUsage() {
WriteLine(" -debug : specifies debug symbol generation.");
WriteLine(" -snkey : specifies strong name key file path.");
WriteLine(" -snkeypass : specifies strong name key password.");
WriteLine(" -v|verbose : increase verbosity (-v debug, -vv trace).");
WriteLine(" -q|quiet : only show warnings and errors.");
}

static void WriteLineWithColor(ConsoleColor color, string txt) {
Expand All @@ -234,57 +267,15 @@ static void WriteLine() {
Console.WriteLine();
}

class ConsoleLogger : ILogger {
class ConsoleProgressReporter : IProgressReporter {
readonly DateTime begin;

public ConsoleLogger() {
public ConsoleProgressReporter() {
begin = DateTime.Now;
}

public int ReturnValue { get; private set; }

public void Debug(string msg) {
WriteLineWithColor(ConsoleColor.Gray, "[DEBUG] " + msg);
}

public void DebugFormat(string format, params object[] args) {
WriteLineWithColor(ConsoleColor.Gray, "[DEBUG] " + string.Format(format, args));
}

public void Info(string msg) {
WriteLineWithColor(ConsoleColor.White, " [INFO] " + msg);
}

public void InfoFormat(string format, params object[] args) {
WriteLineWithColor(ConsoleColor.White, " [INFO] " + string.Format(format, args));
}

public void Warn(string msg) {
WriteLineWithColor(ConsoleColor.Yellow, " [WARN] " + msg);
}

public void WarnFormat(string format, params object[] args) {
WriteLineWithColor(ConsoleColor.Yellow, " [WARN] " + string.Format(format, args));
}

public void WarnException(string msg, Exception ex) {
WriteLineWithColor(ConsoleColor.Yellow, " [WARN] " + msg);
WriteLineWithColor(ConsoleColor.Yellow, "Exception: " + ex);
}

public void Error(string msg) {
WriteLineWithColor(ConsoleColor.Red, "[ERROR] " + msg);
}

public void ErrorFormat(string format, params object[] args) {
WriteLineWithColor(ConsoleColor.Red, "[ERROR] " + string.Format(format, args));
}

public void ErrorException(string msg, Exception ex) {
WriteLineWithColor(ConsoleColor.Red, "[ERROR] " + msg);
WriteLineWithColor(ConsoleColor.Red, "Exception: " + ex);
}

public void Progress(int progress, int overall) { }

public void EndProgress() { }
Expand Down
1 change: 1 addition & 0 deletions Confuser.Core/Confuser.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
<ItemGroup Label="Nuget Dependencies">
<PackageReference Include="dnlib" Version="3.6.0" />
<PackageReference Include="Microsoft.DiaSymReader.Native" Version="1.7.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.*" />
<PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" />
</ItemGroup>

Expand Down
9 changes: 8 additions & 1 deletion Confuser.Core/ConfuserContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Confuser.Core.Project;
using dnlib.DotNet;
using dnlib.DotNet.Writer;
using Microsoft.Extensions.Logging;

namespace Confuser.Core {
/// <summary>
Expand All @@ -18,7 +19,13 @@ public class ConfuserContext {
/// Gets the logger used for logging events.
/// </summary>
/// <value>The logger.</value>
public ILogger Logger { get; internal set; }
public Microsoft.Extensions.Logging.ILogger Logger { get; internal set; }

/// <summary>
/// Gets the progress reporter used for reporting protection progress.
/// </summary>
/// <value>The progress reporter.</value>
public IProgressReporter ProgressReporter { get; internal set; }

/// <summary>
/// Gets the project being processed.
Expand Down
Loading
Loading