mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-04 15:41:25 +00:00 
			
		
		
		
	- Replace `IndexOutOfRangeException` with `ArgumentOutOfRangeException` - Replace `Exception` with a more specific exception - Add the parameter name to argument exception - Update documentation for methods that throw exceptions - Use `StringBuilder` to build exception messages - Ensure exception messages end with a period
		
			
				
	
	
		
			52 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
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", "net6.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();
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |