public Type CompileUserCodeToType(CompilationTargetFx targetFx, Func <string, string> assemblyLocationResolver)
 {
     using (MessagesReaderExtensions extensions = new MessagesReaderExtensions(null, fmtInfo.Value.ExtensionsInitData))
     {
         var fieldsProcessor = MessagesReader.CreateNewFieldsProcessor(this.fmtInfo.Value, extensions, tempFilesManager);
         var type            = fieldsProcessor.CompileUserCodeToType(targetFx, assemblyLocationResolver);
         return(type);
     }
 }
Esempio n. 2
0
        Type CompileUserCodeToTypeInternal(CompilationTargetFx targetFx, Func <string, string> assemblyLocationResolver)
        {
            using (CSharpCodeProvider prov = new CSharpCodeProvider())
                using (var perfop = new Profiling.Operation(trace, "compile user code"))
                {
                    List <string> refs     = new List <string>();
                    string        fullCode = MakeMessagesBuilderCode(inputFieldNames, extensions, outputFields, refs);

                    CompilerParameters cp = new CompilerParameters();
                    if (targetFx == CompilationTargetFx.RunningFx)
                    {
                        cp.ReferencedAssemblies.Add("System.dll");
                        cp.CompilerOptions = "/optimize";
                    }
                    else if (targetFx == CompilationTargetFx.Silverlight)
                    {
                        var silverLightDir = GetSilverlightDir();
                        foreach (var silverlightAsm in new string[] { "mscorlib.dll", "System.Core.dll", "System.dll" })
                        {
                            cp.ReferencedAssemblies.Add(silverLightDir + silverlightAsm);
                        }
                        cp.CompilerOptions = "/optimize /nostdlib+";
                    }
                    List <string> resolvedRefs = new List <string>();
                    resolvedRefs.Add(assemblyLocationResolver(Assembly.GetExecutingAssembly().FullName));
                    resolvedRefs.Add(assemblyLocationResolver(typeof(StringSlice).Assembly.FullName));
                    foreach (string refAsm in refs)
                    {
                        resolvedRefs.Add(assemblyLocationResolver(refAsm));
                    }

                    foreach (string resoledAsm in resolvedRefs)
                    {
                        cp.ReferencedAssemblies.Add(resoledAsm);
                    }

                    string tempDir = tempFilesManager.GenerateNewName();
                    Directory.CreateDirectory(tempDir);
                    cp.OutputAssembly = string.Format("{0}{2}UserCode{1}.dll", tempDir, Guid.NewGuid().ToString("N"), Path.DirectorySeparatorChar);
                    // Temp folder will be cleaned when LogJoint starts next time.
                    cp.TempFiles             = new TempFileCollection(tempDir, false);
                    cp.TreatWarningsAsErrors = false;
                    CompilerResults cr;
                    using (new CodedomEnvironmentConfigurator())
                    {
                        perfop.Milestone("started compile");
                        cr = prov.CompileAssemblyFromSource(cp, fullCode);
                    }
                    if (cr.Errors.HasErrors)
                    {
                        ThrowBadUserCodeException(fullCode, cr);
                    }
                    perfop.Milestone("getting type");
                    return(cr.CompiledAssembly.GetType("GeneratedMessageBuilder"));
                }
        }
Esempio n. 3
0
 Type CompileUserCodeToTypeInternal(CompilationTargetFx targetFx, Func <string, string> assemblyLocationResolver)
 {
     throw new NotImplementedException("Code compilaction not supported in silverlight");
 }
Esempio n. 4
0
 Type IFieldsProcessor.CompileUserCodeToType(CompilationTargetFx targetFx, Func <string, string> assemblyLocationResolver)
 {
     return(CompileUserCodeToTypeInternal(targetFx, assemblyLocationResolver));
 }