using System; using System.IO; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace MSBuildTasks { public class PdbToMdb : Task { [Required] // ReSharper disable once UnusedAutoPropertyAccessor.Global public ITaskItem[] Binaries { get; set; } public override bool Execute() { //var readerProvider = new PdbReaderProvider(); //var writerProvider = new MdbWriterProvider(); foreach (ITaskItem dll in Binaries) { // ItemSpec holds the filename or path of an Item if (dll.ItemSpec.Length > 0) { if (!File.Exists(dll.ItemSpec)) { Log.LogMessage(MessageImportance.Normal, "No file at " + dll.ItemSpec); continue; } if (Path.GetExtension(dll.ItemSpec) != ".dll" && Path.GetExtension(dll.ItemSpec) != ".pdb") { Log.LogMessage(MessageImportance.Normal, dll.ItemSpec + " not a DLL or PDB"); continue; } try { /*Log.LogMessage(MessageImportance.Normal, "Processing PDB for " + dll.ItemSpec); var path = Path.ChangeExtension(dll.ItemSpec, ".dll"); var module = ModuleDefinition.ReadModule(path); var reader = readerProvider.GetSymbolReader(module, path); var writer = writerProvider.GetSymbolWriter(module, path); foreach (var type in module.Types) foreach (var method in type.Methods) { var read = reader.Read(method); if (read == null) Log.LogWarning($"Method {module.FileName} -> {method.FullName} read from PDB as null"); else writer.Write(read); } writer.Dispose(); reader.Dispose(); module.Dispose();*/ var path = Path.ChangeExtension(dll.ItemSpec, ".dll"); Log.LogMessage(MessageImportance.Normal, "Processing PDB for " + path); /*Process.Start(new ProcessStartInfo { WorkingDirectory = Path.GetDirectoryName(path) ?? throw new InvalidOperationException(), FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) ?? throw new InvalidOperationException(), "pdb2mdb.exe"), Arguments = Path.GetFileName(path) });*/ //Pdb2Mdb.Converter.Convert(path); } catch (Exception e) { Log.LogErrorFromException(e); Log.LogError(e.ToString()); } } } return !Log.HasLoggedErrors; } } }