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); } } }