コード例 #1
0
        public void Compile_Test()
        {
            var code = @"class A
             {
                void Add()
                {
                    int a = 1;
                    int b = 2;
                    int c = a + b;
                }
            }";

            using (MemoryStream pe = new MemoryStream(), pdb = new MemoryStream())
            {
                _cSharpService.Compile(code, pe, pdb);

                var assembly = Assembly.Load(pe.ToArray());
                Assert.NotNull(assembly.GetType("A"));
            }
        }
コード例 #2
0
        public ActionResult Parse(string csCode)
        {
            if (_cSharpService.IsValid(csCode))
            {
                List <PEType> peTypes;
                using (Stream peStream = new MemoryStream(), pdbStream = new MemoryStream())
                {
                    _cSharpService.Compile(csCode, peStream, pdbStream);
                    peTypes = _peService.ParseTypes(peStream, pdbStream);
                }

                var csharpTypes = _cSharpService.ParseTypes(csCode);
                var model       = csharpTypes.Select(d => new TypeViewModel
                {
                    Name    = d.Name,
                    Lines   = d.Lines,
                    Methods = d.Methods.Select(m => new Method
                    {
                        Name      = m.Name,
                        Lines     = m.Lines,
                        BodyLines =
                            peTypes.First(i => i.Name == d.Name)
                            .Methods.First(pem => pem.Name == m.Name)
                            .BodyLines.Select(b => new BodyLine
                        {
                            Line         = b.Line,
                            Instructions = b.Instructions
                        })
                    })
                });

                return(Json(model));
            }

            return(Json("error"));
        }