Example #1
0
        public void BuildAssembly(string cSharpSourceCode, string outputFile)
        {
            IList <string> assembliesToReference =

#if NETCORE
                // GetCoreFxReferenceAssemblies is helper method that returns the full set of .NET Core reference assemblies.
                // (There are more than 100 of them.)
                DataContextDriver.GetCoreFxReferenceAssemblies().ToList();
#else
                // .NET Framework - here's how to get the basic Framework assemblies:
                new List <string>()
            {
                typeof(int).Assembly.Location,             // mscorlib
                typeof(Uri).Assembly.Location,             // System
                typeof(Enumerable).Assembly.Location,      // System.Core
            };
#endif

            assembliesToReference.Add(Assembly.GetExecutingAssembly().Location);

            var compileResult = DataContextDriver.CompileSource(new CompilationInput
            {
                FilePathsToReference = assembliesToReference.ToArray(),
                OutputPath           = outputFile,
                SourceCode           = new[] { cSharpSourceCode }
            });

            if (compileResult.Errors.Any())
            {
                throw new Exception("Cannot compile typed context: " + compileResult.Errors[0]);
            }
        }
        public static void Compile(string cSharpSourceCode, string outputFile, string[] referencedAssemblies)
        {
            var compileResult = DataContextDriver.CompileSource(new CompilationInput
            {
                FilePathsToReference = DataContextDriver.GetCoreFxReferenceAssemblies().Concat(referencedAssemblies).ToArray(),
                OutputPath           = outputFile,
                SourceCode           = new[] { cSharpSourceCode }
            });

            if (compileResult.Errors.Length > 0)
            {
                throw new Exception("Cannot compile typed context: " + compileResult.Errors[0]);
            }
        }
Example #3
0
        private static string[] BuildAssembly(string code, AssemblyName name)
        {
            var referencedAssemblies = DataContextDriver.GetCoreFxReferenceAssemblies().Concat(new []
            {
                typeof(SchemaBuilder).Assembly.Location,
                typeof(CsvReader).Assembly.Location
            });

            var result = DataContextDriver.CompileSource(new CompilationInput
            {
                FilePathsToReference = referencedAssemblies.ToArray(),
                OutputPath           = name.CodeBase,
                SourceCode           = new[] { code }
            });

            return(result.Successful ? new string[0] : result.Errors);
        }
        private void RoslynCompile(string[] sources, string assemblyName, string driverFolder)
        {
            var referencedAssemblies = DataContextDriver.GetCoreFxReferenceAssemblies().Concat(new[]
            {
                typeof(ArchiveReader).Assembly.Location,
            }).ToArray();

            var result = DataContextDriver.CompileSource(new CompilationInput()
            {
                FilePathsToReference = referencedAssemblies,
                SourceCode           = sources,
                OutputPath           = Path.Combine(driverFolder, assemblyName)
            });

            if (!result.Successful)
            {
                var message = string.Join(' ', result.Errors);
                throw new Exception($"Compilation failed! {message.ToString()}");
            }
        }
Example #5
0
        public void Compile(string code, AssemblyName name, IEnumerable <string> assemblyLocations)
        {
            var platformAssemblies = DataContextDriver.GetCoreFxReferenceAssemblies();

            var references = platformAssemblies.Concat(assemblyLocations).Select(l => MetadataReference.CreateFromFile(l));

            var parseOptions = new CSharpParseOptions().WithPreprocessorSymbols("NETCORE");

            var compilation = CSharpCompilation.Create(
                name.Name,
                references: references,
                syntaxTrees: new SyntaxTree[] { CSharpSyntaxTree.ParseText(code, parseOptions) },
                options: this.Options
                );

            using var fileStream = File.OpenWrite(name.CodeBase);

            var results = compilation.Emit(fileStream);

            if (!results.Success)
            {
                throw new ArgumentException(string.Format(Exceptions.CannotCompileCode, results.Diagnostics[0].GetMessage(), results.Diagnostics[0].Location.GetLineSpan()));
            }
        }
Example #6
0
 private static string[] AssembliesToReference()
 {
     return(DataContextDriver.GetCoreFxReferenceAssemblies()
            .Append(typeof(TargetObjectBuilder).Assembly.Location).ToArray());
 }