From d2b3abb276da455064efb524dac82d7d896fb777 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Thu, 14 Oct 2021 19:33:32 +0200 Subject: [PATCH] #2516: Add ILSpy.AddIn.slnf, ILSpy.Wpf.slnf and ILSpy.XPlat.slnf; replaces Frontends.sln --- Frontends.sln | 44 ------ .../IlspyCmdProgram.cs | 132 ++++++++++++------ ICSharpCode.Decompiler.Console/TypesParser.cs | 17 ++- .../ValidationAttributes.cs | 6 +- .../GetDecompiledProjectCmdlet.cs | 27 ++-- .../GetDecompiledSourceCmdlet.cs | 15 +- .../GetDecompiledTypesCmdlet.cs | 11 +- .../GetDecompilerCmdlet.cs | 8 +- .../GetDecompilerVersion.cs | 5 +- .../TypesParser.cs | 17 ++- ILSpy.AddIn.slnf | 18 +++ ILSpy.Wpf.slnf | 17 +++ ILSpy.XPlat.slnf | 11 ++ ILSpy.sln | 12 ++ 14 files changed, 221 insertions(+), 119 deletions(-) delete mode 100644 Frontends.sln create mode 100644 ILSpy.AddIn.slnf create mode 100644 ILSpy.Wpf.slnf create mode 100644 ILSpy.XPlat.slnf diff --git a/Frontends.sln b/Frontends.sln deleted file mode 100644 index e25304c21..000000000 --- a/Frontends.sln +++ /dev/null @@ -1,44 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27004.2005 -MinimumVisualStudioVersion = 15.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{F45DB999-7E72-4000-B5AD-3A7B485A0896}" - ProjectSection(SolutionItems) = preProject - doc\Command Line.txt = doc\Command Line.txt - doc\ILAst.txt = doc\ILAst.txt - doc\IntPtr.txt = doc\IntPtr.txt - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICSharpCode.Decompiler.Console", "ICSharpCode.Decompiler.Console\ICSharpCode.Decompiler.Console.csproj", "{8FDA011E-FAF8-4C1F-A695-21E2C6B5375F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICSharpCode.Decompiler.PowerShell", "ICSharpCode.Decompiler.PowerShell\ICSharpCode.Decompiler.PowerShell.csproj", "{FF7D6041-3C52-47D1-A32A-0BFE8EE4EEEB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Decompiler", "ICSharpCode.Decompiler\ICSharpCode.Decompiler.csproj", "{526B267D-1904-4E9E-80DB-BB2259ADCF6C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8FDA011E-FAF8-4C1F-A695-21E2C6B5375F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FDA011E-FAF8-4C1F-A695-21E2C6B5375F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FDA011E-FAF8-4C1F-A695-21E2C6B5375F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FDA011E-FAF8-4C1F-A695-21E2C6B5375F}.Release|Any CPU.Build.0 = Release|Any CPU - {FF7D6041-3C52-47D1-A32A-0BFE8EE4EEEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF7D6041-3C52-47D1-A32A-0BFE8EE4EEEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF7D6041-3C52-47D1-A32A-0BFE8EE4EEEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF7D6041-3C52-47D1-A32A-0BFE8EE4EEEB}.Release|Any CPU.Build.0 = Release|Any CPU - {526B267D-1904-4E9E-80DB-BB2259ADCF6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {526B267D-1904-4E9E-80DB-BB2259ADCF6C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {526B267D-1904-4E9E-80DB-BB2259ADCF6C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {526B267D-1904-4E9E-80DB-BB2259ADCF6C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C764218F-7633-4412-923D-558CE7EE0560} - EndGlobalSection -EndGlobal diff --git a/ICSharpCode.Decompiler.Console/IlspyCmdProgram.cs b/ICSharpCode.Decompiler.Console/IlspyCmdProgram.cs index 5c8ebe558..91f71cf72 100644 --- a/ICSharpCode.Decompiler.Console/IlspyCmdProgram.cs +++ b/ICSharpCode.Decompiler.Console/IlspyCmdProgram.cs @@ -5,17 +5,19 @@ using System.IO; using System.IO.Compression; using System.IO.MemoryMappedFiles; using System.Linq; -using McMaster.Extensions.CommandLineUtils; -using ICSharpCode.Decompiler.CSharp; -using ICSharpCode.Decompiler.TypeSystem; -using ICSharpCode.Decompiler.Metadata; -using ICSharpCode.Decompiler.Disassembler; -using System.Threading; using System.Reflection.Metadata; using System.Reflection.PortableExecutable; +using System.Threading; + +using ICSharpCode.Decompiler.CSharp; +using ICSharpCode.Decompiler.CSharp.ProjectDecompiler; using ICSharpCode.Decompiler.DebugInfo; +using ICSharpCode.Decompiler.Disassembler; +using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.PdbProvider; -using ICSharpCode.Decompiler.CSharp.ProjectDecompiler; +using ICSharpCode.Decompiler.TypeSystem; + +using McMaster.Extensions.CommandLineUtils; // ReSharper disable All namespace ICSharpCode.Decompiler.Console @@ -86,45 +88,65 @@ Remarks: TextWriter output = System.Console.Out; bool outputDirectorySpecified = !string.IsNullOrEmpty(OutputDirectory); - try { - if (CreateCompilableProjectFlag) { + try + { + if (CreateCompilableProjectFlag) + { return DecompileAsProject(InputAssemblyName, OutputDirectory); - } else if (EntityTypes.Any()) { + } + else if (EntityTypes.Any()) + { var values = EntityTypes.SelectMany(v => v.Split(',', ';')).ToArray(); HashSet kinds = TypesParser.ParseSelection(values); - if (outputDirectorySpecified) { + if (outputDirectorySpecified) + { string outputName = Path.GetFileNameWithoutExtension(InputAssemblyName); output = File.CreateText(Path.Combine(OutputDirectory, outputName) + ".list.txt"); } return ListContent(InputAssemblyName, output, kinds); - } else if (ShowILCodeFlag || ShowILSequencePointsFlag) { - if (outputDirectorySpecified) { + } + else if (ShowILCodeFlag || ShowILSequencePointsFlag) + { + if (outputDirectorySpecified) + { string outputName = Path.GetFileNameWithoutExtension(InputAssemblyName); output = File.CreateText(Path.Combine(OutputDirectory, outputName) + ".il"); } return ShowIL(InputAssemblyName, output); - } else if (CreateDebugInfoFlag) { + } + else if (CreateDebugInfoFlag) + { string pdbFileName = null; - if (outputDirectorySpecified) { + if (outputDirectorySpecified) + { string outputName = Path.GetFileNameWithoutExtension(InputAssemblyName); pdbFileName = Path.Combine(OutputDirectory, outputName) + ".pdb"; - } else { + } + else + { pdbFileName = Path.ChangeExtension(InputAssemblyName, ".pdb"); } return GeneratePdbForAssembly(InputAssemblyName, pdbFileName, app); - } else if (ShowVersion) { + } + else if (ShowVersion) + { string vInfo = "ilspycmd: " + typeof(ILSpyCmdProgram).Assembly.GetName().Version.ToString() + - Environment.NewLine - + "ICSharpCode.Decompiler: " + - typeof(FullTypeName).Assembly.GetName().Version.ToString(); + Environment.NewLine + + "ICSharpCode.Decompiler: " + + typeof(FullTypeName).Assembly.GetName().Version.ToString(); output.WriteLine(vInfo); - } else if (DumpPackageFlag) { + } + else if (DumpPackageFlag) + { return DumpPackageAssemblies(InputAssemblyName, OutputDirectory, app); - } else { - if (outputDirectorySpecified) { + } + else + { + if (outputDirectorySpecified) + { string outputName = Path.GetFileNameWithoutExtension(InputAssemblyName); output = File.CreateText(Path.Combine(OutputDirectory, (string.IsNullOrEmpty(TypeName) ? outputName : TypeName) + ".decompiled.cs")); @@ -132,10 +154,14 @@ Remarks: return Decompile(InputAssemblyName, output, TypeName); } - } catch (Exception ex) { + } + catch (Exception ex) + { app.Error.WriteLine(ex.ToString()); return ProgramExitCodes.EX_SOFTWARE; - } finally { + } + finally + { output.Close(); } @@ -156,7 +182,8 @@ Remarks: { var module = new PEFile(assemblyFileName); var resolver = new UniversalAssemblyResolver(assemblyFileName, false, module.Reader.DetectTargetFrameworkId()); - foreach (var path in ReferencePaths) { + foreach (var path in ReferencePaths) + { resolver.AddSearchDirectory(path); } return new CSharpDecompiler(assemblyFileName, resolver, GetSettings(module)) { @@ -168,7 +195,8 @@ Remarks: { CSharpDecompiler decompiler = GetDecompiler(assemblyFileName); - foreach (var type in decompiler.TypeSystem.MainModule.TypeDefinitions) { + foreach (var type in decompiler.TypeSystem.MainModule.TypeDefinitions) + { if (!kinds.Contains(type.Kind)) continue; output.WriteLine($"{type.Kind} {type.FullName}"); @@ -180,8 +208,7 @@ Remarks: { var module = new PEFile(assemblyFileName); output.WriteLine($"// IL code: {module.Name}"); - var disassembler = new ReflectionDisassembler(new PlainTextOutput(output), CancellationToken.None) - { + var disassembler = new ReflectionDisassembler(new PlainTextOutput(output), CancellationToken.None) { DebugInfo = TryLoadPDB(module), ShowSequencePoints = ShowILSequencePointsFlag, }; @@ -193,7 +220,8 @@ Remarks: { var module = new PEFile(assemblyFileName); var resolver = new UniversalAssemblyResolver(assemblyFileName, false, module.Reader.DetectTargetFrameworkId()); - foreach (var path in ReferencePaths) { + foreach (var path in ReferencePaths) + { resolver.AddSearchDirectory(path); } var decompiler = new WholeProjectDecompiler(GetSettings(module), resolver, resolver, TryLoadPDB(module)); @@ -205,9 +233,12 @@ Remarks: { CSharpDecompiler decompiler = GetDecompiler(assemblyFileName); - if (typeName == null) { + if (typeName == null) + { output.Write(decompiler.DecompileWholeModuleAsString()); - } else { + } + else + { var name = new FullTypeName(typeName); output.Write(decompiler.DecompileTypeAsString(name)); } @@ -221,12 +252,14 @@ Remarks: PEStreamOptions.PrefetchEntireImage, metadataOptions: MetadataReaderOptions.None); - if (!PortablePdbWriter.HasCodeViewDebugDirectoryEntry(module)) { + if (!PortablePdbWriter.HasCodeViewDebugDirectoryEntry(module)) + { app.Error.WriteLine($"Cannot create PDB file for {assemblyFileName}, because it does not contain a PE Debug Directory Entry of type 'CodeView'."); return ProgramExitCodes.EX_DATAERR; } - using (FileStream stream = new FileStream(pdbFileName, FileMode.OpenOrCreate, FileAccess.Write)) { + using (FileStream stream = new FileStream(pdbFileName, FileMode.OpenOrCreate, FileAccess.Write)) + { var decompiler = GetDecompiler(assemblyFileName); PortablePdbWriter.WritePdb(module, decompiler, GetSettings(module), stream); } @@ -236,27 +269,36 @@ Remarks: int DumpPackageAssemblies(string packageFileName, string outputDirectory, CommandLineApplication app) { - using (var memoryMappedPackage = MemoryMappedFile.CreateFromFile(packageFileName, FileMode.Open, null, 0, MemoryMappedFileAccess.Read)) { - using (var packageView = memoryMappedPackage.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read)) { - if (!SingleFileBundle.IsBundle(packageView, out long bundleHeaderOffset)) { + using (var memoryMappedPackage = MemoryMappedFile.CreateFromFile(packageFileName, FileMode.Open, null, 0, MemoryMappedFileAccess.Read)) + { + using (var packageView = memoryMappedPackage.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read)) + { + if (!SingleFileBundle.IsBundle(packageView, out long bundleHeaderOffset)) + { app.Error.WriteLine($"Cannot dump assembiles for {packageFileName}, because it is not a single file bundle."); return ProgramExitCodes.EX_DATAERR; } var manifest = SingleFileBundle.ReadManifest(packageView, bundleHeaderOffset); - foreach (var entry in manifest.Entries) { + foreach (var entry in manifest.Entries) + { Stream contents; - if (entry.CompressedSize == 0) { + if (entry.CompressedSize == 0) + { contents = new UnmanagedMemoryStream(packageView.SafeMemoryMappedViewHandle, entry.Offset, entry.Size); - } else { + } + else + { Stream compressedStream = new UnmanagedMemoryStream(packageView.SafeMemoryMappedViewHandle, entry.Offset, entry.CompressedSize); Stream decompressedStream = new MemoryStream((int)entry.Size); - using (var deflateStream = new DeflateStream(compressedStream, CompressionMode.Decompress)) { + using (var deflateStream = new DeflateStream(compressedStream, CompressionMode.Decompress)) + { deflateStream.CopyTo(decompressedStream); } - if (decompressedStream.Length != entry.Size) { + if (decompressedStream.Length != entry.Size) + { app.Error.WriteLine($"Corrupted single-file entry '${entry.RelativePath}'. Declared decompressed size '${entry.Size}' is not the same as actual decompressed size '${decompressedStream.Length}'."); return ProgramExitCodes.EX_DATAERR; } @@ -265,7 +307,8 @@ Remarks: contents = decompressedStream; } - using (var fileStream = File.Create(Path.Combine(outputDirectory, entry.RelativePath))) { + using (var fileStream = File.Create(Path.Combine(outputDirectory, entry.RelativePath))) + { contents.CopyTo(fileStream); } } @@ -277,7 +320,8 @@ Remarks: IDebugInfoProvider TryLoadPDB(PEFile module) { - if (InputPDBFile.IsSet) { + if (InputPDBFile.IsSet) + { if (InputPDBFile.Value == null) return DebugInfoUtils.LoadSymbols(module); return DebugInfoUtils.FromFile(module, InputPDBFile.Value); diff --git a/ICSharpCode.Decompiler.Console/TypesParser.cs b/ICSharpCode.Decompiler.Console/TypesParser.cs index 31476a915..844585bb6 100644 --- a/ICSharpCode.Decompiler.Console/TypesParser.cs +++ b/ICSharpCode.Decompiler.Console/TypesParser.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; + using ICSharpCode.Decompiler.TypeSystem; namespace ICSharpCode.Decompiler.Console @@ -11,9 +12,12 @@ namespace ICSharpCode.Decompiler.Console { var possibleValues = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["class"] = TypeKind.Class, ["struct"] = TypeKind.Struct, ["interface"] = TypeKind.Interface, ["enum"] = TypeKind.Enum, ["delegate"] = TypeKind.Delegate }; HashSet kinds = new HashSet(); - if (values.Length == 1 && !possibleValues.Keys.Any(v => values[0].StartsWith(v, StringComparison.OrdinalIgnoreCase))) { - foreach (char ch in values[0]) { - switch (ch) { + if (values.Length == 1 && !possibleValues.Keys.Any(v => values[0].StartsWith(v, StringComparison.OrdinalIgnoreCase))) + { + foreach (char ch in values[0]) + { + switch (ch) + { case 'c': kinds.Add(TypeKind.Class); break; @@ -31,8 +35,11 @@ namespace ICSharpCode.Decompiler.Console break; } } - } else { - foreach (var value in values) { + } + else + { + foreach (var value in values) + { string v = value; while (v.Length > 0 && !possibleValues.ContainsKey(v)) v = v.Remove(v.Length - 1); diff --git a/ICSharpCode.Decompiler.Console/ValidationAttributes.cs b/ICSharpCode.Decompiler.Console/ValidationAttributes.cs index a593b1674..d231f883e 100644 --- a/ICSharpCode.Decompiler.Console/ValidationAttributes.cs +++ b/ICSharpCode.Decompiler.Console/ValidationAttributes.cs @@ -13,8 +13,10 @@ namespace ICSharpCode.Decompiler.Console protected override ValidationResult IsValid(object value, ValidationContext context) { - if (value is ILSpyCmdProgram obj) { - if (obj.CreateCompilableProjectFlag && string.IsNullOrEmpty(obj.OutputDirectory)) { + if (value is ILSpyCmdProgram obj) + { + if (obj.CreateCompilableProjectFlag && string.IsNullOrEmpty(obj.OutputDirectory)) + { return new ValidationResult("--project cannot be used unless --outputdir is also specified"); } } diff --git a/ICSharpCode.Decompiler.PowerShell/GetDecompiledProjectCmdlet.cs b/ICSharpCode.Decompiler.PowerShell/GetDecompiledProjectCmdlet.cs index 736f59933..5627c2e08 100644 --- a/ICSharpCode.Decompiler.PowerShell/GetDecompiledProjectCmdlet.cs +++ b/ICSharpCode.Decompiler.PowerShell/GetDecompiledProjectCmdlet.cs @@ -4,6 +4,7 @@ using System.IO; using System.Management.Automation; using System.Threading; using System.Threading.Tasks; + using ICSharpCode.Decompiler.CSharp; using ICSharpCode.Decompiler.CSharp.ProjectDecompiler; using ICSharpCode.Decompiler.Metadata; @@ -29,7 +30,8 @@ namespace ICSharpCode.Decompiler.PowerShell public void Report(DecompilationProgress value) { - lock (syncObject) { + lock (syncObject) + { completed++; progress = new ProgressRecord(1, "Decompiling " + fileName, $"Completed {completed} of {value.TotalNumberOfFiles}: {value.Status}") { PercentComplete = (int)(completed * 100.0 / value.TotalNumberOfFiles) @@ -40,28 +42,35 @@ namespace ICSharpCode.Decompiler.PowerShell protected override void ProcessRecord() { string path = GetUnresolvedProviderPathFromPSPath(LiteralPath); - if (!Directory.Exists(path)) { + if (!Directory.Exists(path)) + { WriteObject("Destination directory must exist prior to decompilation"); return; } - try { + try + { var task = Task.Run(() => DoDecompile(path)); int timeout = 100; // Give the decompiler some time to spin up all threads Thread.Sleep(timeout); - while (!task.IsCompleted) { + while (!task.IsCompleted) + { ProgressRecord progress; - lock (syncObject) { + lock (syncObject) + { progress = this.progress; this.progress = null; } - if (progress != null) { + if (progress != null) + { timeout = 100; WriteProgress(progress); - } else { + } + else + { Thread.Sleep(timeout); timeout = Math.Min(1000, timeout * 2); } @@ -70,7 +79,9 @@ namespace ICSharpCode.Decompiler.PowerShell task.Wait(); WriteProgress(new ProgressRecord(1, "Decompiling " + fileName, "Decompilation finished") { RecordType = ProgressRecordType.Completed }); - } catch (Exception e) { + } + catch (Exception e) + { WriteVerbose(e.ToString()); WriteError(new ErrorRecord(e, ErrorIds.DecompilationFailed, ErrorCategory.OperationStopped, null)); } diff --git a/ICSharpCode.Decompiler.PowerShell/GetDecompiledSourceCmdlet.cs b/ICSharpCode.Decompiler.PowerShell/GetDecompiledSourceCmdlet.cs index a63242ecf..e6a8ccdb7 100644 --- a/ICSharpCode.Decompiler.PowerShell/GetDecompiledSourceCmdlet.cs +++ b/ICSharpCode.Decompiler.PowerShell/GetDecompiledSourceCmdlet.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.IO; using System.Management.Automation; using System.Text; + using ICSharpCode.Decompiler.CSharp; using ICSharpCode.Decompiler.TypeSystem; @@ -20,17 +21,23 @@ namespace ICSharpCode.Decompiler.PowerShell protected override void ProcessRecord() { - try { + try + { StringWriter output = new StringWriter(); - if (TypeName == null) { + if (TypeName == null) + { output.Write(Decompiler.DecompileWholeModuleAsString()); - } else { + } + else + { var name = new FullTypeName(TypeName); output.Write(Decompiler.DecompileTypeAsString(name)); } WriteObject(output.ToString()); - } catch (Exception e) { + } + catch (Exception e) + { WriteVerbose(e.ToString()); WriteError(new ErrorRecord(e, ErrorIds.DecompilationFailed, ErrorCategory.OperationStopped, null)); } diff --git a/ICSharpCode.Decompiler.PowerShell/GetDecompiledTypesCmdlet.cs b/ICSharpCode.Decompiler.PowerShell/GetDecompiledTypesCmdlet.cs index 16451e041..4c2e014d4 100644 --- a/ICSharpCode.Decompiler.PowerShell/GetDecompiledTypesCmdlet.cs +++ b/ICSharpCode.Decompiler.PowerShell/GetDecompiledTypesCmdlet.cs @@ -4,6 +4,7 @@ using System.IO; using System.Linq; using System.Management.Automation; using System.Text; + using ICSharpCode.Decompiler.CSharp; using ICSharpCode.Decompiler.TypeSystem; @@ -23,16 +24,20 @@ namespace ICSharpCode.Decompiler.PowerShell { HashSet kinds = TypesParser.ParseSelection(Types); - try { + try + { List output = new List(); - foreach (var type in Decompiler.TypeSystem.MainModule.TypeDefinitions) { + foreach (var type in Decompiler.TypeSystem.MainModule.TypeDefinitions) + { if (!kinds.Contains(type.Kind)) continue; output.Add(type); } WriteObject(output.ToArray()); - } catch (Exception e) { + } + catch (Exception e) + { WriteVerbose(e.ToString()); WriteError(new ErrorRecord(e, ErrorIds.DecompilationFailed, ErrorCategory.OperationStopped, null)); } diff --git a/ICSharpCode.Decompiler.PowerShell/GetDecompilerCmdlet.cs b/ICSharpCode.Decompiler.PowerShell/GetDecompilerCmdlet.cs index 30616b253..5252ceff7 100644 --- a/ICSharpCode.Decompiler.PowerShell/GetDecompilerCmdlet.cs +++ b/ICSharpCode.Decompiler.PowerShell/GetDecompilerCmdlet.cs @@ -4,6 +4,7 @@ using System.IO; using System.Management.Automation; using System.Reflection.PortableExecutable; using System.Text; + using ICSharpCode.Decompiler.CSharp; using ICSharpCode.Decompiler.Metadata; using ICSharpCode.Decompiler.PdbProvider; @@ -35,7 +36,8 @@ namespace ICSharpCode.Decompiler.PowerShell { string path = GetUnresolvedProviderPathFromPSPath(LiteralPath); - try { + try + { var module = new PEFile(LiteralPath, new FileStream(LiteralPath, FileMode.Open, FileAccess.Read), PEStreamOptions.Default); var debugInfo = DebugInfoUtils.FromFile(module, PDBFilePath); var decompiler = new CSharpDecompiler(path, new DecompilerSettings(LanguageVersion) { @@ -47,7 +49,9 @@ namespace ICSharpCode.Decompiler.PowerShell }); decompiler.DebugInfoProvider = debugInfo; WriteObject(decompiler); - } catch (Exception e) { + } + catch (Exception e) + { WriteVerbose(e.ToString()); WriteError(new ErrorRecord(e, ErrorIds.AssemblyLoadFailed, ErrorCategory.OperationStopped, null)); } diff --git a/ICSharpCode.Decompiler.PowerShell/GetDecompilerVersion.cs b/ICSharpCode.Decompiler.PowerShell/GetDecompilerVersion.cs index 51ee9a1cd..81f3677f8 100644 --- a/ICSharpCode.Decompiler.PowerShell/GetDecompilerVersion.cs +++ b/ICSharpCode.Decompiler.PowerShell/GetDecompilerVersion.cs @@ -1,5 +1,6 @@ using System; using System.Management.Automation; + using ICSharpCode.Decompiler.TypeSystem; namespace ICSharpCode.Decompiler.PowerShell @@ -8,8 +9,8 @@ namespace ICSharpCode.Decompiler.PowerShell [OutputType(typeof(string))] public class GetDecompilerVersion : PSCmdlet { - protected override void ProcessRecord() - { + protected override void ProcessRecord() + { WriteObject(typeof(FullTypeName).Assembly.GetName().Version.ToString()); } } diff --git a/ICSharpCode.Decompiler.PowerShell/TypesParser.cs b/ICSharpCode.Decompiler.PowerShell/TypesParser.cs index ed157d656..4f9fef0a1 100644 --- a/ICSharpCode.Decompiler.PowerShell/TypesParser.cs +++ b/ICSharpCode.Decompiler.PowerShell/TypesParser.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; + using ICSharpCode.Decompiler.TypeSystem; namespace ICSharpCode.Decompiler.PowerShell @@ -12,9 +13,12 @@ namespace ICSharpCode.Decompiler.PowerShell { var possibleValues = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["class"] = TypeKind.Class, ["struct"] = TypeKind.Struct, ["interface"] = TypeKind.Interface, ["enum"] = TypeKind.Enum, ["delegate"] = TypeKind.Delegate }; HashSet kinds = new HashSet(); - if (values.Length == 1 && !possibleValues.Keys.Any(v => values[0].StartsWith(v, StringComparison.OrdinalIgnoreCase))) { - foreach (char ch in values[0]) { - switch (ch) { + if (values.Length == 1 && !possibleValues.Keys.Any(v => values[0].StartsWith(v, StringComparison.OrdinalIgnoreCase))) + { + foreach (char ch in values[0]) + { + switch (ch) + { case 'c': kinds.Add(TypeKind.Class); break; @@ -32,8 +36,11 @@ namespace ICSharpCode.Decompiler.PowerShell break; } } - } else { - foreach (var value in values) { + } + else + { + foreach (var value in values) + { string v = value; while (v.Length > 0 && !possibleValues.ContainsKey(v)) v = v.Remove(v.Length - 1); diff --git a/ILSpy.AddIn.slnf b/ILSpy.AddIn.slnf new file mode 100644 index 000000000..4ff6cf3f5 --- /dev/null +++ b/ILSpy.AddIn.slnf @@ -0,0 +1,18 @@ +{ + "solution": { + "path": "ILSpy.sln", + "projects": [ + "ICSharpCode.Decompiler.PdbProvider.Cecil\\ICSharpCode.Decompiler.PdbProvider.Cecil.csproj", + "ICSharpCode.Decompiler.Tests\\ICSharpCode.Decompiler.Tests.csproj", + "ICSharpCode.Decompiler\\ICSharpCode.Decompiler.csproj", + "ILSpy.AddIn\\ILSpy.AddIn.csproj", + "ILSpy.BamlDecompiler.Tests\\ILSpy.BamlDecompiler.Tests.csproj", + "ILSpy.BamlDecompiler\\ILSpy.BamlDecompiler.csproj", + "ILSpy.ReadyToRun\\ILSpy.ReadyToRun.csproj", + "ILSpy.Tests\\ILSpy.Tests.csproj", + "ILSpy\\ILSpy.csproj", + "SharpTreeView\\ICSharpCode.TreeView.csproj", + "TestPlugin\\TestPlugin.csproj" + ] + } +} \ No newline at end of file diff --git a/ILSpy.Wpf.slnf b/ILSpy.Wpf.slnf new file mode 100644 index 000000000..259436d4c --- /dev/null +++ b/ILSpy.Wpf.slnf @@ -0,0 +1,17 @@ +{ + "solution": { + "path": "ILSpy.sln", + "projects": [ + "ICSharpCode.Decompiler.PdbProvider.Cecil\\ICSharpCode.Decompiler.PdbProvider.Cecil.csproj", + "ICSharpCode.Decompiler.Tests\\ICSharpCode.Decompiler.Tests.csproj", + "ICSharpCode.Decompiler\\ICSharpCode.Decompiler.csproj", + "ILSpy.BamlDecompiler.Tests\\ILSpy.BamlDecompiler.Tests.csproj", + "ILSpy.BamlDecompiler\\ILSpy.BamlDecompiler.csproj", + "ILSpy.ReadyToRun\\ILSpy.ReadyToRun.csproj", + "ILSpy.Tests\\ILSpy.Tests.csproj", + "ILSpy\\ILSpy.csproj", + "SharpTreeView\\ICSharpCode.TreeView.csproj", + "TestPlugin\\TestPlugin.csproj" + ] + } +} \ No newline at end of file diff --git a/ILSpy.XPlat.slnf b/ILSpy.XPlat.slnf new file mode 100644 index 000000000..02445a148 --- /dev/null +++ b/ILSpy.XPlat.slnf @@ -0,0 +1,11 @@ +{ + "solution": { + "path": "ILSpy.sln", + "projects": [ + "ICSharpCode.Decompiler.Console\\ICSharpCode.Decompiler.Console.csproj", + "ICSharpCode.Decompiler.PowerShell\\ICSharpCode.Decompiler.PowerShell.csproj", + "ICSharpCode.Decompiler.Tests\\ICSharpCode.Decompiler.Tests.csproj", + "ICSharpCode.Decompiler\\ICSharpCode.Decompiler.csproj" + ] + } +} \ No newline at end of file diff --git a/ILSpy.sln b/ILSpy.sln index 3803fa607..6739a0b21 100644 --- a/ILSpy.sln +++ b/ILSpy.sln @@ -39,6 +39,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILSpy.Tests", "ILSpy.Tests\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ILSpy.ReadyToRun", "ILSpy.ReadyToRun\ILSpy.ReadyToRun.csproj", "{0313F581-C63B-43BB-AA9B-07615DABD8A3}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICSharpCode.Decompiler.Console", "ICSharpCode.Decompiler.Console\ICSharpCode.Decompiler.Console.csproj", "{743B439A-E7AD-4A0A-BAB6-222E1EA83C6D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ICSharpCode.Decompiler.PowerShell", "ICSharpCode.Decompiler.PowerShell\ICSharpCode.Decompiler.PowerShell.csproj", "{50060E0C-FA25-41F4-B72F-8490324EC9F0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -89,6 +93,14 @@ Global {0313F581-C63B-43BB-AA9B-07615DABD8A3}.Debug|Any CPU.Build.0 = Debug|Any CPU {0313F581-C63B-43BB-AA9B-07615DABD8A3}.Release|Any CPU.ActiveCfg = Release|Any CPU {0313F581-C63B-43BB-AA9B-07615DABD8A3}.Release|Any CPU.Build.0 = Release|Any CPU + {743B439A-E7AD-4A0A-BAB6-222E1EA83C6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {743B439A-E7AD-4A0A-BAB6-222E1EA83C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {743B439A-E7AD-4A0A-BAB6-222E1EA83C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {743B439A-E7AD-4A0A-BAB6-222E1EA83C6D}.Release|Any CPU.Build.0 = Release|Any CPU + {50060E0C-FA25-41F4-B72F-8490324EC9F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50060E0C-FA25-41F4-B72F-8490324EC9F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50060E0C-FA25-41F4-B72F-8490324EC9F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50060E0C-FA25-41F4-B72F-8490324EC9F0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE