67 lines
3.2 KiB
C#
67 lines
3.2 KiB
C#
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.Text;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
|
|||
|
namespace Automation
|
|||
|
{
|
|||
|
class Automation
|
|||
|
{
|
|||
|
private static readonly string Name = "automation";
|
|||
|
|
|||
|
private static readonly string XmlPrefix = "<!--Start Dependencies-->\n <ItemGroup>\n";
|
|||
|
private static readonly string XmlSuffix = " </ItemGroup>\n<!--End Dependencies-->";
|
|||
|
|
|||
|
private static readonly string GamecraftModdingAPI_csproj = @"\GamecraftModdingAPI.csproj";
|
|||
|
static void Main(string[] args)
|
|||
|
{
|
|||
|
if (args.Length != 2 || args[0] == "-h" || args[0] == "--help")
|
|||
|
{
|
|||
|
Console.WriteLine($"Usage : {Name}.exe <path to Gamecraft DLLs> <path to GamecraftModdingAPI.csproj>");
|
|||
|
Console.WriteLine("Other arguments:");
|
|||
|
Console.WriteLine(" --help : display this message");
|
|||
|
Console.WriteLine($" --version : display {Name}'s version");
|
|||
|
return;
|
|||
|
}
|
|||
|
Console.WriteLine("Building Assembly references");
|
|||
|
string asmXml = BuildAssemblyReferencesXML(args[0]);
|
|||
|
//Console.WriteLine(asmXml);
|
|||
|
string csprojPath = args[1].EndsWith(GamecraftModdingAPI_csproj)? args[1] : args[1]+GamecraftModdingAPI_csproj;
|
|||
|
Console.WriteLine($"Parsing {csprojPath}");
|
|||
|
string csprojContents = File.ReadAllText(csprojPath);
|
|||
|
Match dependenciesStart = (new Regex(@"<\s*!--\s*Start\s+Dependencies\s*--\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline)).Match(csprojContents);
|
|||
|
Match dependenciesEnd = (new Regex(@"<\s*!--\s*End\s+Dependencies\s*--\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Multiline)).Match(csprojContents);
|
|||
|
if (!dependenciesEnd.Success || !dependenciesStart.Success)
|
|||
|
{
|
|||
|
Console.WriteLine("Unable to find dependency XML comments, aborting!");
|
|||
|
return;
|
|||
|
}
|
|||
|
csprojContents = csprojContents.Substring(0, dependenciesStart.Index) + asmXml + csprojContents.Substring(dependenciesEnd.Index+dependenciesEnd.Length);
|
|||
|
//Console.WriteLine(csprojContents);
|
|||
|
Console.WriteLine($"Writing Assembly references into {csprojPath}");
|
|||
|
File.WriteAllText(csprojPath, csprojContents);
|
|||
|
Console.WriteLine("Successfully generated Gamecraft assembly DLL references");
|
|||
|
}
|
|||
|
|
|||
|
static string BuildAssemblyReferencesXML(string path)
|
|||
|
{
|
|||
|
StringBuilder result = new StringBuilder();
|
|||
|
result.Append(XmlPrefix);
|
|||
|
string[] files = Directory.GetFiles(path, "*.dll");
|
|||
|
for(int i = 0; i<files.Length; i++)
|
|||
|
{
|
|||
|
if (files[i].Contains(@"\System.") || files[i].EndsWith(@"mscorlib.dll") || files[i].Contains(@"\Mono."))
|
|||
|
{
|
|||
|
// no
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
result.Append($" <Reference Include=\"{files[i].Substring(files[i].LastIndexOf(@"\") + 1).Replace(".dll", "")}\">\n <HintPath>{files[i]}</HintPath>\n </Reference>\n");
|
|||
|
}
|
|||
|
}
|
|||
|
result.Append(XmlSuffix);
|
|||
|
return result.ToString();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|