1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- using System;
- using System.Globalization;
- using System.IO;
- using System.Text;
- using Microsoft.Build.Construction;
- using Microsoft.Build.Evaluation;
- using GodotTools.Shared;
- namespace GodotTools.ProjectEditor
- {
- public static class ProjectGenerator
- {
- public static string GodotSdkAttrValue => $"Godot.NET.Sdk/{GeneratedGodotNupkgsVersions.GodotNETSdk}";
- public static ProjectRootElement GenGameProject(string name)
- {
- if (name.Length == 0)
- throw new ArgumentException("Project name is empty.", nameof(name));
- var root = ProjectRootElement.Create(NewProjectFileOptions.None);
- root.Sdk = GodotSdkAttrValue;
- var mainGroup = root.AddPropertyGroup();
- mainGroup.AddProperty("TargetFramework", "net8.0");
- mainGroup.AddProperty("EnableDynamicLoading", "true");
- string sanitizedName = IdentifierUtils.SanitizeQualifiedIdentifier(name, allowEmptyIdentifiers: true);
- // If the name is not a valid namespace, manually set RootNamespace to a sanitized one.
- if (sanitizedName != name)
- mainGroup.AddProperty("RootNamespace", sanitizedName);
- return root;
- }
- public static string GenAndSaveGameProject(string dir, string name)
- {
- if (name.Length == 0)
- throw new ArgumentException("Project name is empty.", nameof(name));
- string path = Path.Combine(dir, name + ".csproj");
- var root = GenGameProject(name);
- // Save (without BOM)
- root.Save(path, new UTF8Encoding(encoderShouldEmitUTF8Identifier: false));
- return Guid.NewGuid().ToString().ToUpperInvariant();
- }
- }
- }
|