public async Task BaZicCompile() { var inputCode = @"EXTERN FUNCTION Main(args[]) VARIABLE var1 = 1 VARIABLE Var1 = 2 VARIABLE result = var1 + Var1 System.Console.WriteLine(result.ToString()) RETURN result END FUNCTION"; using (var interpreter = new BaZicInterpreter(inputCode, false)) { var mscorlib = AssemblyInfoHelper.GetAssemblyDetailsFromNameOrLocation(typeof(object).Assembly.FullName); var baZicCoreTest = AssemblyInfoHelper.GetAssemblyDetailsFromNameOrLocation(typeof(LogMock).Assembly.Location); interpreter.SetDependencies(mscorlib, baZicCoreTest); var tempFile = Path.Combine(Path.GetTempPath(), "BaZic_Bin", Path.GetFileNameWithoutExtension(Path.GetTempFileName()) + ".exe"); var errors = await interpreter.Build(Core.Enums.BaZicCompilerOutputType.ConsoleApp, tempFile); Assert.IsNull(errors); Assert.IsTrue(File.Exists(tempFile)); Assert.IsTrue(File.Exists(tempFile.Replace(".exe", ".pdb"))); Assert.IsTrue(File.Exists(Path.Combine(Path.GetTempPath(), "BaZic_Bin", "BaZic.Core.Tests.dll"))); File.Delete(tempFile); File.Delete(tempFile.Replace(".exe", ".pdb")); File.Delete(Path.Combine(Path.GetTempPath(), "BaZic_Bin", "BaZic.Core.Tests.dll")); Directory.Delete(Path.Combine(Path.GetTempPath(), @"BaZic_Bin"), true); } }
/// <summary> /// Set program required assemblies. /// </summary> /// <param name="assemblies">The fullname or path to assemblies</param> /// <returns>The current program</returns> public BaZicProgram WithAssemblies(params string[] assemblies) { var assembliesDetails = new List <AssemblyDetails>(); foreach (var assembly in assemblies) { assembliesDetails.Add(AssemblyInfoHelper.GetAssemblyDetailsFromNameOrLocation(assembly)); } Assemblies = assembliesDetails.AsReadOnly(); return(this); }
/// <summary> /// Load in the application domain all the required assemblies. /// </summary> private void LoadAssemblies() { var assemblies = Program.Assemblies.ToList(); var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location); var assembliesPath = new List <String>(); assembliesPath.Add("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); assembliesPath.Add("System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); assembliesPath.Add("System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); assembliesPath.Add("System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); assembliesPath.Add("Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"); assembliesPath.Add("PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); assembliesPath.Add("PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); assembliesPath.Add("WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"); foreach (var path in assembliesPath) { if (assemblies.All(a => string.CompareOrdinal(a.ToLocationOrFullName(), path) != 0)) { assemblies.Add(AssemblyInfoHelper.GetAssemblyDetailsFromNameOrLocation(path)); } } AssemblyDetails details = null; try { for (int i = 0; i < assemblies.Count; i++) { details = assemblies[i]; _assemblySandbox.LoadAssembly(details, false); if (Verbose) { ChangeState(this, new BaZicInterpreterStateChangeEventArgs(L.BaZic.Runtime.BaZicInterpreter.FormattedAssemblyLoaded(details.ToLocationOrFullName()))); } } } catch (Exception exception) { CoreHelper.ReportException(exception); ChangeState(this, new LoadAssemblyException(L.BaZic.Runtime.BaZicInterpreter.FormattedAssemblyFailedLoad(details.ToLocationOrFullName()), details.ToLocationOrFullName(), exception)); } }