public void Compile_SimpleTestScript_AddMethodReturnsCorrectValue()
        {
            var compiler = new RoslynCompiler();

            var outputStream = new MemoryStream();

            var compilationPackage = new CompilationPackage();

            compilationPackage.AddReferenceAssembly(typeof(ISimpleScript).Assembly);
            compilationPackage.SourceCodes.Add(new SourceCodeUnit(TestScripts.SimpleScript, "Test.cs"));

            var compilationOutput = new CompilationOutput(CompilationOutputKind.DynamicallyLinkedLibrary,
                                                          new StreamCompilationOutputData(outputStream));

            var compilerResult = compiler.Compile(compilationPackage, compilationOutput);

            Assert.Empty(compilerResult.Messages.Where(x => x.MessageType == CompilationMessageType.Error));

            var assembly = Assembly.Load(outputStream.ToArray());

            var simpleScript = assembly.CreateInstance(
                "CreativeCoders.CodeCompilation.UnitTests.TestData.SimpleScript") as ISimpleScript;

            var value = simpleScript?.AddIntegers(12, 34);

            Assert.Equal(46, value);
        }
Esempio n. 2
0
        public static CompiledScript CompileScript(string script, string name = "")
        {
            Output = new CompilationOutput();
            script = script.Replace("\r\n", "");
            var compiled = new CompiledScript(script);

            compiled.Name = name;
            if (!CODE_INFO.Scripts.Contains(compiled))
            {
                CODE_INFO.Scripts.Add(compiled);
            }

            return(compiled);
        }
Esempio n. 3
0
        public ICompilationResult Compile(CompilationPackage compilationPackage, CompilationOutput compilationOutput)
        {
            Ensure.IsNotNull(compilationOutput, nameof(compilationOutput));

            var syntaxTrees = CreateSyntaxTrees(compilationPackage.SourceCodes).ToArray();

            var assemblyFiles =
                GetAssembliesFromUsings(
                    syntaxTrees.SelectMany(syntaxTree =>
                                           syntaxTree.GetCompilationUnitRoot().Usings.Select(usingDirective => usingDirective)),
                    compilationPackage);

            var compilation = CreateCompilation(syntaxTrees, assemblyFiles, compilationPackage, compilationOutput);

            return(new RoslynCompilationResult(compilation, compilationOutput.OutputData));
        }
Esempio n. 4
0
        private static CSharpCompilation CreateCompilation(IEnumerable <SyntaxTree> syntaxTrees,
                                                           IEnumerable <string> assemblyFiles,
                                                           CompilationPackage compilationPackage, CompilationOutput compilationOutput)
        {
            var assemblyName = compilationPackage.AssemblyName;

            if (string.IsNullOrWhiteSpace(assemblyName))
            {
                assemblyName = FileSys.Path.ChangeExtension(FileSys.Path.GetRandomFileName(), ".dll");
            }

            var references = GetReferences(assemblyFiles);

            var compilation = CSharpCompilation.Create(assemblyName, syntaxTrees, references,
                                                       new CSharpCompilationOptions(RoslynConvert.ConvertOutputKind(compilationOutput.OutputKind)));

            return(compilation);
        }