JD2022-TU1/sm_runner/Program.cs

67 lines
2.8 KiB
C#

using System;
using System.IO;
using System.Reflection;
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, resolveArgs) =>
{
var name = new AssemblyName(resolveArgs.Name).Name;
var searchDirs = new[]
{
@"d:\JDRelated\JD22SRC_Build\main\build\sharpmake\Tools\Helpers",
@"d:\JDRelated\JD22SRC_Build\main\build\sharpmake\sharpmake_1.8.0",
@"d:\JDRelated\JD22SRC_Build\main\build\sharpmake",
};
foreach (var dir in searchDirs)
{
var candidate = Path.Combine(dir, name + ".dll");
if (File.Exists(candidate))
{
return Assembly.LoadFrom(candidate);
}
}
return null;
};
Directory.SetCurrentDirectory(@"d:\JDRelated\JD22SRC_Build\main");
var asmSharpmake = Assembly.LoadFrom(@"d:\JDRelated\JD22SRC_Build\main\build\sharpmake\sharpmake_1.8.0\Sharpmake.dll");
var asmApp = Assembly.LoadFrom(@"d:\JDRelated\JD22SRC_Build\main\build\sharpmake\sharpmake_1.8.0\Sharpmake.Application.dll");
var genAllType = asmSharpmake.GetType("Sharpmake.BuildContext.GenerateAll");
// writeLog = true, writeGeneratedFiles = true!
var buildContext = Activator.CreateInstance(genAllType, new object[] { true, true });
var argType = asmApp.GetType("Sharpmake.Application.Program+Argument");
var inputType = asmApp.GetType("Sharpmake.Application.Program+Argument+InputType");
var arguments = Activator.CreateInstance(argType);
var fieldInput = argType.GetField("Input", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var fieldSources = argType.GetField("Sources", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
fieldSources.SetValue(arguments, new string[] { @"d:\JDRelated\JD22SRC_Build\main\build\sharpmake\main.cs" });
fieldInput.SetValue(arguments, Enum.Parse(inputType, "File"));
var progType = asmApp.GetType("Sharpmake.Application.Program");
var createBuilderAndGenMethod = progType.GetMethod("CreateBuilderAndGenerate", BindingFlags.NonPublic | BindingFlags.Static);
Console.WriteLine("Invoking CreateBuilderAndGenerate (with writeGeneratedFiles=true)...");
try
{
createBuilderAndGenMethod.Invoke(null, new object[] { buildContext, arguments, false });
Console.WriteLine("Done successfully!");
}
catch (TargetInvocationException ex)
{
Console.WriteLine("TargetInvocationException: " + ex.InnerException);
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex);
}
}
}