Ejemplo n.º 1
0
        private bool RunPublisher()
        {
            ProcessStartInfo startInfo = new ProcessStartInfo
            {
                FileName               = JitHostController.GetDotnetExecutablePath(_jitTarget),
                Arguments              = BuildArguments(),
                CreateNoWindow         = true,
                WindowStyle            = ProcessWindowStyle.Hidden,
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                UseShellExecute        = false,
                WorkingDirectory       = _propertyProvider.ProjectPath
            };

            using (var process = Process.Start(startInfo))
            {
                process.OutputDataReceived += OutputDataReceived;
                process.ErrorDataReceived  += OutputDataReceived;
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                process.WaitForExit();

                process.OutputDataReceived -= OutputDataReceived;
                process.ErrorDataReceived  -= OutputDataReceived;

                return(process.ExitCode == 0);
            }
        }
Ejemplo n.º 2
0
        public static (SemanticModel SemanticModel, AssemblyCallGraph CallGraph) Run(string resourceFileName, Platform platform)
        {
            string source = GetEmbeddedResource(resourceFileName);

            var tree = CSharpSyntaxTree.ParseText(source, new CSharpParseOptions(LanguageVersion.CSharp7_3));
            CSharpCompilation compilation = CreateCSharpCompilation(tree, platform);

            var tempFileName = Path.GetTempFileName();

            try
            {
                CreateAssembly(compilation, tempFileName);

                using (var etwCollector = new EtwCollector(true))
                {
                    var targetPlatform = platform == Platform.X64 ? TargetPlatform.X64 : TargetPlatform.X86;
                    JitHostController jitController = new JitHostController(tempFileName, new JitTarget(targetPlatform, TargetRuntime.NetFramework, null), new TargetScope(ScopeType.Project), null, new TestJitPathResolver());

                    jitController.StartProcess();
                    jitController.Process.OutputDataReceived += JitHostOutputDataReceived;
                    jitController.Process.ErrorDataReceived  += JitHostOutputDataReceived;
                    jitController.Process.BeginOutputReadLine();

                    etwCollector.StartEventTrace(jitController.Process.Id);
                    jitController.RunJitCompilation();
                    etwCollector.StopEventTrace();

                    jitController.Process.OutputDataReceived -= JitHostOutputDataReceived;
                    jitController.Process.ErrorDataReceived  -= JitHostOutputDataReceived;

                    CallGraphPostProcessor.Process(etwCollector.AssemblyCallGraph);
                    return(compilation.GetSemanticModel(tree), etwCollector.AssemblyCallGraph);
                }
            }
            finally
            {
                if (File.Exists(tempFileName))
                {
                    File.Delete(tempFileName);
                }
            }
        }
Ejemplo n.º 3
0
        private AssemblyCallGraph RunJitCompiler(JitHostController jitController)
        {
            using (var etwCollector = new EtwCollector(_recordEventDetails))
            {
                jitController.StartProcess();
                jitController.Process.OutputDataReceived += JitHostOutputDataReceived;
                jitController.Process.ErrorDataReceived  += JitHostOutputDataReceived;
                jitController.Process.BeginOutputReadLine();
                jitController.Process.BeginErrorReadLine();

                etwCollector.StartEventTrace(jitController.Process.Id);
                jitController.RunJitCompilation();
                etwCollector.StopEventTrace();

                jitController.Process.OutputDataReceived -= JitHostOutputDataReceived;
                jitController.Process.ErrorDataReceived  -= JitHostOutputDataReceived;

                CallGraphPostProcessor.Process(etwCollector.AssemblyCallGraph);
                return(etwCollector.AssemblyCallGraph);
            }
        }