You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

78 lines
3.2 KiB

  1. using System;
  2. using System.IO;
  3. using Microsoft.Build.Framework;
  4. using Microsoft.Build.Utilities;
  5. namespace MSBuildTasks
  6. {
  7. public class PdbToMdb : Task
  8. {
  9. [Required]
  10. // ReSharper disable once UnusedAutoPropertyAccessor.Global
  11. public ITaskItem[] Binaries { get; set; }
  12. public override bool Execute()
  13. {
  14. //var readerProvider = new PdbReaderProvider();
  15. //var writerProvider = new MdbWriterProvider();
  16. foreach (ITaskItem dll in Binaries)
  17. {
  18. // ItemSpec holds the filename or path of an Item
  19. if (dll.ItemSpec.Length > 0)
  20. {
  21. if (!File.Exists(dll.ItemSpec))
  22. {
  23. Log.LogMessage(MessageImportance.Normal, "No file at " + dll.ItemSpec);
  24. continue;
  25. }
  26. if (Path.GetExtension(dll.ItemSpec) != ".dll" && Path.GetExtension(dll.ItemSpec) != ".pdb")
  27. {
  28. Log.LogMessage(MessageImportance.Normal, dll.ItemSpec + " not a DLL or PDB");
  29. continue;
  30. }
  31. try
  32. {
  33. /*Log.LogMessage(MessageImportance.Normal, "Processing PDB for " + dll.ItemSpec);
  34. var path = Path.ChangeExtension(dll.ItemSpec, ".dll");
  35. var module = ModuleDefinition.ReadModule(path);
  36. var reader = readerProvider.GetSymbolReader(module, path);
  37. var writer = writerProvider.GetSymbolWriter(module, path);
  38. foreach (var type in module.Types)
  39. foreach (var method in type.Methods)
  40. {
  41. var read = reader.Read(method);
  42. if (read == null) Log.LogWarning($"Method {module.FileName} -> {method.FullName} read from PDB as null");
  43. else writer.Write(read);
  44. }
  45. writer.Dispose();
  46. reader.Dispose();
  47. module.Dispose();*/
  48. var path = Path.ChangeExtension(dll.ItemSpec, ".dll");
  49. Log.LogMessage(MessageImportance.Normal, "Processing PDB for " + path);
  50. /*Process.Start(new ProcessStartInfo
  51. {
  52. WorkingDirectory = Path.GetDirectoryName(path) ?? throw new InvalidOperationException(),
  53. FileName = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) ?? throw new InvalidOperationException(), "pdb2mdb.exe"),
  54. Arguments = Path.GetFileName(path)
  55. });*/
  56. //Pdb2Mdb.Converter.Convert(path);
  57. }
  58. catch (Exception e)
  59. {
  60. Log.LogErrorFromException(e);
  61. Log.LogError(e.ToString());
  62. }
  63. }
  64. }
  65. return !Log.HasLoggedErrors;
  66. }
  67. }
  68. }