diff --git a/ILSpy/Languages/CSharpLanguage.cs b/ILSpy/Languages/CSharpLanguage.cs index a6d0f3847..83b0cda82 100644 --- a/ILSpy/Languages/CSharpLanguage.cs +++ b/ILSpy/Languages/CSharpLanguage.cs @@ -423,6 +423,25 @@ namespace ICSharpCode.ILSpy return true; } + IEnumerable> WriteAssemblyInfo(ModuleDefinition module, DecompilationOptions options, HashSet directories) + { + // don't automatically load additional assemblies when an assembly node is selected in the tree view + using (LoadedAssembly.DisableAssemblyLoad()) + { + AstBuilder codeDomBuilder = CreateAstBuilder(options, currentModule: module); + codeDomBuilder.AddAssembly(module, onlyAssemblyLevel: true); + codeDomBuilder.RunTransformations(transformAbortCondition); + + string prop = "Properties"; + if (directories.Add("Properties")) + Directory.CreateDirectory(Path.Combine(options.SaveAsProjectDirectory, prop)); + string assemblyInfo = Path.Combine(prop, "AssemblyInfo" + this.FileExtension); + using (StreamWriter w = new StreamWriter(Path.Combine(options.SaveAsProjectDirectory, assemblyInfo))) + codeDomBuilder.GenerateCode(new PlainTextOutput(w)); + return new Tuple[] { Tuple.Create("Compile", assemblyInfo) }; + } + } + IEnumerable> WriteCodeFilesInProject(ModuleDefinition module, DecompilationOptions options, HashSet directories) { var files = module.Types.Where(t => IncludeTypeWhenDecompilingProject(t, options)).GroupBy( @@ -452,7 +471,7 @@ namespace ICSharpCode.ILSpy } }); AstMethodBodyBuilder.PrintNumberOfUnhandledOpcodes(); - return files.Select(f => Tuple.Create("Compile", f.Key)); + return files.Select(f => Tuple.Create("Compile", f.Key)).Concat(WriteAssemblyInfo(module, options, directories)); } #endregion diff --git a/ILSpy/VB/VBLanguage.cs b/ILSpy/VB/VBLanguage.cs index 0274a0ae7..db34e20df 100644 --- a/ILSpy/VB/VBLanguage.cs +++ b/ILSpy/VB/VBLanguage.cs @@ -248,6 +248,25 @@ namespace ICSharpCode.ILSpy.VB return true; } + IEnumerable> WriteAssemblyInfo(ModuleDefinition module, DecompilationOptions options, HashSet directories) + { + // don't automatically load additional assemblies when an assembly node is selected in the tree view + using (LoadedAssembly.DisableAssemblyLoad()) + { + AstBuilder codeDomBuilder = CreateAstBuilder(options, currentModule: module); + codeDomBuilder.AddAssembly(module, onlyAssemblyLevel: true); + codeDomBuilder.RunTransformations(transformAbortCondition); + + string prop = "Properties"; + if (directories.Add("Properties")) + Directory.CreateDirectory(Path.Combine(options.SaveAsProjectDirectory, prop)); + string assemblyInfo = Path.Combine(prop, "AssemblyInfo" + this.FileExtension); + using (StreamWriter w = new StreamWriter(Path.Combine(options.SaveAsProjectDirectory, assemblyInfo))) + codeDomBuilder.GenerateCode(new PlainTextOutput(w)); + return new Tuple[] { Tuple.Create("Compile", assemblyInfo) }; + } + } + IEnumerable> WriteCodeFilesInProject(ModuleDefinition module, DecompilationOptions options, HashSet directories) { var files = module.Types.Where(t => IncludeTypeWhenDecompilingProject(t, options)).GroupBy( @@ -276,7 +295,7 @@ namespace ICSharpCode.ILSpy.VB } }); AstMethodBodyBuilder.PrintNumberOfUnhandledOpcodes(); - return files.Select(f => Tuple.Create("Compile", f.Key)); + return files.Select(f => Tuple.Create("Compile", f.Key)).Concat(WriteAssemblyInfo(module, options, directories)); } #endregion