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.

69 lines
2.3 KiB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Mono.Cecil;
  6. using Microsoft.Build.Utilities;
  7. using Microsoft.Build.Framework;
  8. using System.IO;
  9. namespace MSBuildTasks
  10. {
  11. public class AssemblyRename : Task
  12. {
  13. private ITaskItem[] assemblies;
  14. [Required]
  15. public ITaskItem[] Assemblies
  16. {
  17. get => assemblies;
  18. set => assemblies = value;
  19. }
  20. public override bool Execute()
  21. {
  22. foreach (ITaskItem assembly in Assemblies)
  23. {
  24. // ItemSpec holds the filename or path of an Item
  25. if (assembly.ItemSpec.Length > 0)
  26. {
  27. if (!File.Exists(assembly.ItemSpec))
  28. {
  29. Log.LogMessage(MessageImportance.Normal, "No file at " + assembly.ItemSpec);
  30. continue;
  31. }
  32. if (Path.GetExtension(assembly.ItemSpec) != ".dll")
  33. {
  34. Log.LogMessage(MessageImportance.Normal, assembly.ItemSpec + " not a DLL");
  35. continue;
  36. }
  37. try
  38. {
  39. Log.LogMessage(MessageImportance.Normal, "Reading " + assembly.ItemSpec);
  40. var module = ModuleDefinition.ReadModule(assembly.ItemSpec);
  41. var asmName = module.Assembly.Name;
  42. var name = asmName.Name;
  43. var version = asmName.Version;
  44. var newFilen = $"{name}.{version}.dll";
  45. var newFilePath = Path.Combine(Path.GetDirectoryName(assembly.ItemSpec), newFilen);
  46. Log.LogMessage(MessageImportance.Normal, $"Old file: {assembly.ItemSpec}, new file: {newFilePath}");
  47. if (File.Exists(newFilePath))
  48. File.Delete(newFilePath);
  49. File.Move(assembly.ItemSpec, newFilePath);
  50. }
  51. catch (Exception e)
  52. {
  53. Log.LogErrorFromException(e);
  54. }
  55. }
  56. }
  57. return !Log.HasLoggedErrors;
  58. }
  59. }
  60. }