private void DisassembleFile(string fileName) { WriteLine(String.Format("{0}: ", fileName)); string outputDir = Path.Combine(txtOutputDir.Text, Path.GetFileName(fileName)) + "_Source"; if (!Directory.Exists(outputDir)) { Directory.CreateDirectory(outputDir); } Reflector.CodeModel.IAssembly assembly = null; bool unloadAssembly = false; try { assembly = _reflector.FindAssembly(fileName); if (assembly == null) { assembly = _reflector.LoadAssembly(fileName); unloadAssembly = true; } _host.SetProgress(0); FileDisassemblerHelper helper = new FileDisassemblerHelper( _reflector, fileName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) ? ProjectTypes.Library : ProjectTypes.WinExe, outputDir, new FileDisassemblerHelper.WriteLineDelegate(WriteLine), new FileDisassemblerHelper.SetProgressBarDelegate(SetProgressBar), new FileDisassemblerHelper.IsCancelPendingDelegate(IsCancelPending)); int exceptions = helper.GenerateCode(assembly); WriteLine(string.Format("Done. {0} error(s).\r\n", exceptions)); } catch { throw; } finally { if (assembly != null && unloadAssembly) { _reflector.AssemblyManager.Unload(assembly); } _host.SetProgress(100); } }