ProjectUtils.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using Microsoft.Build.Construction;
  3. namespace GodotTools.ProjectEditor
  4. {
  5. public sealed class MSBuildProject
  6. {
  7. internal ProjectRootElement Root { get; set; }
  8. public bool HasUnsavedChanges { get; set; }
  9. public void Save() => Root.Save();
  10. public MSBuildProject(ProjectRootElement root)
  11. {
  12. Root = root;
  13. }
  14. }
  15. public static class ProjectUtils
  16. {
  17. public static void MSBuildLocatorRegisterDefaults(out Version version, out string path)
  18. {
  19. var instance = Microsoft.Build.Locator.MSBuildLocator.RegisterDefaults();
  20. version = instance.Version;
  21. path = instance.MSBuildPath;
  22. }
  23. public static void MSBuildLocatorRegisterMSBuildPath(string msbuildPath)
  24. => Microsoft.Build.Locator.MSBuildLocator.RegisterMSBuildPath(msbuildPath);
  25. public static MSBuildProject Open(string path)
  26. {
  27. var root = ProjectRootElement.Open(path);
  28. return root != null ? new MSBuildProject(root) : null;
  29. }
  30. public static void MigrateToProjectSdksStyle(MSBuildProject project, string projectName)
  31. {
  32. var origRoot = project.Root;
  33. if (!string.IsNullOrEmpty(origRoot.Sdk))
  34. return;
  35. project.Root = ProjectGenerator.GenGameProject(projectName);
  36. project.Root.FullPath = origRoot.FullPath;
  37. project.HasUnsavedChanges = true;
  38. }
  39. public static void EnsureGodotSdkIsUpToDate(MSBuildProject project)
  40. {
  41. var root = project.Root;
  42. string godotSdkAttrValue = ProjectGenerator.GodotSdkAttrValue;
  43. if (!string.IsNullOrEmpty(root.Sdk) &&
  44. root.Sdk.Trim().Equals(godotSdkAttrValue, StringComparison.OrdinalIgnoreCase))
  45. return;
  46. root.Sdk = godotSdkAttrValue;
  47. project.HasUnsavedChanges = true;
  48. }
  49. }
  50. }