コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
            }
        }