ProjectGenerator.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.IO;
  3. using Microsoft.Build.Construction;
  4. using Microsoft.Build.Evaluation;
  5. namespace GodotTools.ProjectEditor
  6. {
  7. public static class ProjectGenerator
  8. {
  9. public const string GodotSdkVersionToUse = "4.0.0-dev2";
  10. public static string GodotSdkAttrValue => $"Godot.NET.Sdk/{GodotSdkVersionToUse}";
  11. public static ProjectRootElement GenGameProject(string name)
  12. {
  13. if (name.Length == 0)
  14. throw new ArgumentException("Project name is empty", nameof(name));
  15. var root = ProjectRootElement.Create(NewProjectFileOptions.None);
  16. root.Sdk = GodotSdkAttrValue;
  17. var mainGroup = root.AddPropertyGroup();
  18. mainGroup.AddProperty("TargetFramework", "netstandard2.1");
  19. string sanitizedName = IdentifierUtils.SanitizeQualifiedIdentifier(name, allowEmptyIdentifiers: true);
  20. // If the name is not a valid namespace, manually set RootNamespace to a sanitized one.
  21. if (sanitizedName != name)
  22. mainGroup.AddProperty("RootNamespace", sanitizedName);
  23. return root;
  24. }
  25. public static string GenAndSaveGameProject(string dir, string name)
  26. {
  27. if (name.Length == 0)
  28. throw new ArgumentException("Project name is empty", nameof(name));
  29. string path = Path.Combine(dir, name + ".csproj");
  30. var root = GenGameProject(name);
  31. root.Save(path);
  32. return Guid.NewGuid().ToString().ToUpper();
  33. }
  34. }
  35. }