public async Task <IActionResult> Post([FromBody] JToken jsonBody) { if (jsonBody == null) { return(BadRequest("Missing body")); } string script = jsonBody.Value <string>("script"); if (string.IsNullOrWhiteSpace(script)) { return(BadRequest("Missing script from body")); } EntityMetadata metaData = new EntityMetadata(script); CompilerResponse compilerResponse = new CompilerResponse(); using (var invoker = new EntityInvoker(metaData, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports())) { await invoker.InitializeEntryPointAsync(); compilerResponse.CompilationOutput = invoker.CompilationOutput; compilerResponse.CompilationSucceeded = invoker.IsCompilationSuccessful; if (compilerResponse.CompilationSucceeded) { Tuple <string, string> asmBytes = await invoker.GetAssemblyBytesAsync(); compilerResponse.AssemblyBytes = asmBytes.Item1; compilerResponse.PdbBytes = asmBytes.Item2; } } return(Ok(compilerResponse)); }
public async Task <IActionResult> Post([FromBody] JToken jsonBody) { if (jsonBody == null) { return(BadRequest("Missing body")); } // Get script and reference var script = jsonBody.Value <string>("script"); if (string.IsNullOrWhiteSpace(script)) { return(BadRequest("Missing script from body")); } var references = TryExtract(jsonBody, "reference") ?? new Dictionary <string, string>(); if (!Enum.TryParse(jsonBody.Value <string>("entityType"), true, out EntityType entityType)) { entityType = EntityType.Signal; } var metaData = new EntityMetadata(script, entityType); var compilerResponse = new CompilerResponse(); using (var invoker = new EntityInvoker(metaData, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports(), references.ToImmutableDictionary())) { await invoker.InitializeEntryPointAsync(); compilerResponse.CompilationTraces = invoker.CompilationOutput; compilerResponse.CompilationSucceeded = invoker.IsCompilationSuccessful; compilerResponse.References = invoker.References; if (compilerResponse.CompilationSucceeded) { var asmBytes = await invoker.GetAssemblyBytesAsync(); compilerResponse.AssemblyBytes = asmBytes.Item1; compilerResponse.PdbBytes = asmBytes.Item2; } } return(Ok(compilerResponse)); }
public async void EntityInvoker_TestGetAssemblyBytes() { Definition definitonAttribute = new Definition() { Id = "TestId" }; EntityMetadata metadata = ScriptTestDataHelper.GetRandomMetadata(); metadata.ScriptText = await ScriptTestDataHelper.GetDetectorScript(definitonAttribute); using (EntityInvoker invoker = new EntityInvoker(metadata, ScriptHelper.GetFrameworkReferences(), ScriptHelper.GetFrameworkImports())) { await invoker.InitializeEntryPointAsync(); Tuple <string, string> asmPair = await invoker.GetAssemblyBytesAsync(); string assemblyBytes = asmPair.Item1; string pdbBytes = asmPair.Item2; Assert.False(string.IsNullOrWhiteSpace(assemblyBytes)); Assert.False(string.IsNullOrWhiteSpace(pdbBytes)); } }