Browse Source

Fix #1412: Output file empty - ICSharpCode.Decompiler.Console: dot not foreget to close stream at end of program.

pull/1417/head
Siegfried Pammer 7 years ago
parent
commit
5c004ae0fd
  1. 58
      ICSharpCode.Decompiler.Console/Program.cs

58
ICSharpCode.Decompiler.Console/Program.cs

@ -52,35 +52,38 @@ namespace ICSharpCode.Decompiler.Console
app.Error.WriteLine($"ERROR: Output directory '{outputOption.Value()}' does not exist."); app.Error.WriteLine($"ERROR: Output directory '{outputOption.Value()}' does not exist.");
return -1; return -1;
} }
if (projectOption.HasValue()) { TextWriter output = System.Console.Out;
DecompileAsProject(inputAssemblyFileName.Value, outputOption.Value()); try {
} else if (listOption.HasValue()) { if (projectOption.HasValue()) {
var values = listOption.Values.SelectMany(v => v.Split(',', ';')).ToArray(); DecompileAsProject(inputAssemblyFileName.Value, outputOption.Value());
HashSet<TypeKind> kinds = TypesParser.ParseSelection(values); } else if (listOption.HasValue()) {
TextWriter output = System.Console.Out; var values = listOption.Values.SelectMany(v => v.Split(',', ';')).ToArray();
if (outputOption.HasValue()) { HashSet<TypeKind> kinds = TypesParser.ParseSelection(values);
string directory = outputOption.Value(); if (outputOption.HasValue()) {
string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value); string directory = outputOption.Value();
output = File.CreateText(Path.Combine(directory, outputName) + ".list.txt"); string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value);
output = File.CreateText(Path.Combine(directory, outputName) + ".list.txt");
}
ListContent(inputAssemblyFileName.Value, output, kinds);
} else if (ilViewerOption.HasValue()) {
if (outputOption.HasValue()) {
string directory = outputOption.Value();
string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value);
output = File.CreateText(Path.Combine(directory, outputName) + ".il");
}
ShowIL(inputAssemblyFileName.Value, output);
} else {
if (outputOption.HasValue()) {
string directory = outputOption.Value();
string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value);
output = File.CreateText(Path.Combine(directory, (typeOption.Value() ?? outputName) + ".decompiled.cs"));
}
Decompile(inputAssemblyFileName.Value, output, typeOption.Value());
} }
ListContent(inputAssemblyFileName.Value, output, kinds); } finally {
} else if (ilViewerOption.HasValue()) { output.Close();
TextWriter output = System.Console.Out;
if (outputOption.HasValue()) {
string directory = outputOption.Value();
string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value);
output = File.CreateText(Path.Combine(directory, outputName) + ".il");
}
ShowIL(inputAssemblyFileName.Value, output);
} else {
TextWriter output = System.Console.Out;
if (outputOption.HasValue()) {
string directory = outputOption.Value();
string outputName = Path.GetFileNameWithoutExtension(inputAssemblyFileName.Value);
output = File.CreateText(Path.Combine(directory, (typeOption.Value() ?? outputName) + ".decompiled.cs"));
}
Decompile(inputAssemblyFileName.Value, output, typeOption.Value());
} }
// do not use Console here!
return 0; return 0;
}); });
@ -115,7 +118,6 @@ namespace ICSharpCode.Decompiler.Console
output.WriteLine($"// IL code: {decompiler.TypeSystem.MainModule.AssemblyName}"); output.WriteLine($"// IL code: {decompiler.TypeSystem.MainModule.AssemblyName}");
output.WriteLine(textOutput.ToString()); output.WriteLine(textOutput.ToString());
output.Flush();
} }
static void DecompileAsProject(string assemblyFileName, string outputDirectory) static void DecompileAsProject(string assemblyFileName, string outputDirectory)

Loading…
Cancel
Save