コード例 #1
0
        /// <summary>
        /// Load all useful references
        /// </summary>
        public void ScriptEngineLoadAssemblies(ScriptEngine engine, string localAssembly)
        {
            //GAC Assemblies
            var systemCoreReference             = MetadataReference.CreateAssemblyReference("System.Core");
            var systemReference                 = MetadataReference.CreateAssemblyReference("System");
            var systemComponentModel            = MetadataReference.CreateAssemblyReference("System.ComponentModel");
            var systemComponentModelComposition =
                MetadataReference.CreateAssemblyReference("System.ComponentModel.Composition");
            var systemIO           = MetadataReference.CreateAssemblyReference("System.IO");
            var systemLinq         = MetadataReference.CreateAssemblyReference("System.Linq");
            var systemReflection   = MetadataReference.CreateAssemblyReference("System.Runtime.Serialization");
            var systemServiceModel = MetadataReference.CreateAssemblyReference("System.ServiceModel");
            var systemWindows      = MetadataReference.CreateAssemblyReference("System.Windows");

            //Custom Assemblies
            Assembly wpfAssembly   = Assembly.GetAssembly(typeof(AdminConsoleViewModel));
            Assembly caliburnMicro = Assembly.GetAssembly(typeof(Conductor <IScreen> .Collection.OneActive));

            engine.AddReference(systemCoreReference);
            engine.AddReference(systemReference);
            engine.AddReference(systemComponentModel);
            engine.AddReference(systemComponentModelComposition);
            engine.AddReference(systemIO);
            engine.AddReference(systemLinq);
            engine.AddReference(systemReflection);
            engine.AddReference(systemServiceModel);
            engine.AddReference(systemWindows);
            engine.AddReference(wpfAssembly.Location);
            engine.AddReference(caliburnMicro.Location);
            engine.AddReference(localAssembly);
        }
コード例 #2
0
        public static Compilation BuildCompilation(List <SyntaxTree> treelist)
        {
            List <MetadataReference> reflist = new List <MetadataReference>();

            // Collect the system API references from using directives
            var totalUsings = treelist.AsParallel().Select(
                tree => tree.GetRoot().DescendantNodes().OfType <UsingDirectiveSyntax>());
            // transfer to a list
            var totalUsingList = totalUsings.SelectMany(x => x).ToList();
            // create metareference
            List <String> allLibNames = new List <string>();

            foreach (var usingLib in totalUsingList)
            {
                String            libName   = usingLib.Name.ToString();
                MetadataReference reference = null;
                while (libName != "" && reference == null)
                {
                    if (allLibNames.Contains(libName))
                    {
                        break;
                    }

                    allLibNames.Add(libName);

                    try
                    {
                        // Add system API libs by MetadataReference.CreateAssemblyReference
                        reference = MetadataReference.CreateAssemblyReference(libName);
                    }
                    catch (Exception)
                    {
                        // handle cases that "libName.dll" does not exist
                        int idx = libName.LastIndexOf('.');
                        if (idx == -1)
                        {
                            libName = "";
                            break;
                        }
                        libName = libName.Substring(0, idx);
                    }
                }

                if (reference != null)
                {
                    Logger.Log("Adding reference: " + libName + ".dll");
                    reflist.Add(reference);
                }
            }

            reflist.AddRange(appReflist);
            var compilationOptions = new CompilationOptions(outputKind: OutputKind.WindowsApplication);
            var compilation        = Compilation.Create(
                outputName: "AllCompilation",
                options: compilationOptions,
                syntaxTrees: treelist,
                references: reflist);

            return(compilation);
        }
コード例 #3
0
        private static Type CreateType()
        {
            SyntaxTree tree = SyntaxTree.ParseText(
                @"using System;
 
                    namespace Foo
                    {
                        public class Bar
                        {
                            public static void Test()
                            {
                                Console.WriteLine(""Hello World!"");
                            }
                        }
                    }");
            var compilation = Compilation.Create("Hello")
                              .WithOptions(new CompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                              .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
                              .AddSyntaxTrees(tree);
            ModuleBuilder helloModuleBuilder = AppDomain.CurrentDomain
                                               .DefineDynamicAssembly(new AssemblyName("FooAssembly"), AssemblyBuilderAccess.RunAndCollect)
                                               .DefineDynamicModule("FooModule");
            var result = compilation.Emit(helloModuleBuilder);

            return(helloModuleBuilder.GetType("Foo.Bar"));
        }
コード例 #4
0
ファイル: HelixViewModel.cs プロジェクト: zhangf911/gemini
        private void CompileScripts()
        {
            lock (_scripts)
            {
                _scripts.Clear();

                var newAssembly = _codeCompiler.Compile(
                    new[] { SyntaxTree.ParseText(_helixView.TextEditor.Text) },
                    new[]
                {
                    MetadataReference.CreateAssemblyReference("mscorlib"),
                    MetadataReference.CreateAssemblyReference("System"),
                    MetadataReference.CreateAssemblyReference("System.ObjectModel"),
                    MetadataReference.CreateAssemblyReference("System.Runtime"),
                    MetadataReference.CreateAssemblyReference("PresentationCore"),
                    new MetadataFileReference(typeof(IResult).Assembly.Location),
                    new MetadataFileReference(typeof(AppBootstrapper).Assembly.Location),
                    new MetadataFileReference(GetType().Assembly.Location)
                },
                    "GeminiDemoScript");

                _scripts.AddRange(newAssembly.GetTypes()
                                  .Where(x => typeof(IDemoScript).IsAssignableFrom(x))
                                  .Select(x => (IDemoScript)Activator.CreateInstance(x)));
            }
        }
コード例 #5
0
ファイル: CSharpTextBox.cs プロジェクト: kishoredbn/svcperf
        public static void EnsureInitialized()
        {
            if (!Initialized)
            {
                lock (ThisLock)
                {
                    References = new MetadataReference[] {
                        MetadataReference.CreateAssemblyReference(typeof(object).Assembly.GetName().Name),
                        new MetadataFileReference(typeof(SequenceDiagram).Assembly.Location),
                        new MetadataFileReference(typeof(System.Reactive.Playback).Assembly.Location),
                        new MetadataFileReference(typeof(Tx.Windows.SystemEvent).Assembly.Location)
                    };

                    SyntaxTree tree        = SyntaxTree.ParseText(JitPrimeTemplate);
                    var        compilation = Roslyn.Compilers.CSharp.Compilation.Create(
                        "MyCompilation",
                        syntaxTrees: new[] { tree },
                        references: References);
                    var model      = compilation.GetSemanticModel(tree);
                    var namespaces = model.Compilation.GlobalNamespace.GetMembers()
                                     .Where((e) => e is NamespaceSymbol);
                    List <NamespaceSymbol> items = new List <NamespaceSymbol>();
                    foreach (var item in namespaces)
                    {
                        items.Add(item as NamespaceSymbol);
                    }
                    CsharpSyntaxWalker.NamespaceCollection = items.ToArray();
                    Initialized = true;
                    Trace.Assert(NamespaceContainsType("SequenceDiagram") == true);
                }
            }
        }
コード例 #6
0
        private Document CreateDocument(string code)
        {
            var docName    = "Test." + this.language == LanguageNames.CSharp ? "cs" : "vb";
            var solutionId = SolutionId.CreateNewId("TestSolution");
            var projectId  = ProjectId.CreateNewId(debugName: "TestProject");
            var documentId = DocumentId.CreateNewId(projectId, debugName: docName);

            var solution = Solution
                           .Create(solutionId)
                           .AddProject(projectId, "TestProject", "TestProject", this.language)
                           .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("mscorlib"))
                           .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System.Core"));

            if (this.language == LanguageNames.VisualBasic)
            {
                solution = solution.AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("Microsoft.VisualBasic"));
            }

            var document = solution
                           .AddDocument(documentId, docName, SourceText.From(code))
                           .GetDocument(documentId);
            var diags = document.GetSemanticModelAsync().Result.GetDiagnostics().ToArray();

            foreach (var diag in diags)
            {
                Console.WriteLine(diag.ToString());
            }

            return(document);
        }
コード例 #7
0
        public static SemanticModel GetSemanticInfo(SyntaxTree tree)
        {
            // Collect the system API references from using directives
            List <MetadataReference> reflist = new List <MetadataReference>();
            var root      = tree.GetRoot();
            var usingList = root.DescendantNodes().OfType <UsingDirectiveSyntax>();

            List <String> allLibNames = new List <string>();

            foreach (var usingLib in usingList)
            {
                String            libName   = usingLib.Name.ToString();
                MetadataReference reference = null;
                while (libName != "" && reference == null)
                {
                    if (allLibNames.Contains(libName))
                    {
                        break;
                    }

                    allLibNames.Add(libName);

                    try
                    {
                        // Add system API libs by MetadataReference.CreateAssemblyReference
                        reference = MetadataReference.CreateAssemblyReference(libName);
                    }
                    catch (Exception)
                    {
                        // handle cases that "libName.dll" does not exist
                        int idx = libName.LastIndexOf('.');
                        if (idx == -1)
                        {
                            libName = "";
                            break;
                        }
                        libName = libName.Substring(0, idx);
                    }
                }

                if (reference != null)
                {
                    Logger.Log("Adding reference: " + libName + ".dll");
                    reflist.Add(reference);
                }
            }

            reflist.AddRange(appReflist);
            var compilationOptions = new CompilationOptions(outputKind: OutputKind.WindowsApplication);
            var compilation        = Compilation.Create(
                outputName: "ACompilation",
                options: compilationOptions,
                syntaxTrees: new[] { tree },
                references: reflist);

            var model = compilation.GetSemanticModel(tree);

            return(model);
        }
コード例 #8
0
ファイル: Program.cs プロジェクト: ntr/RoslynCSharpExtensions
        private static Compilation GetCompilation(SyntaxTree tree)
        {
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib");

            var compilation = Compilation.Create(
                outputName: "HelloWorld",
                syntaxTrees: new[] { tree },
                references: new[] { mscorlib });

            return(compilation);
        }
コード例 #9
0
        private static IDocument GetDocument(IText text)
        {
            ProjectId  projectId;
            DocumentId documentId;

            return(Solution.Create(SolutionId.CreateNewId())
                   .AddCSharpProject("NotifyPropertyChanged", "NotifyPropertyChanged", out projectId)
                   .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("mscorlib"))
                   .AddMetadataReference(projectId, MetadataReference.CreateAssemblyReference("System"))
                   .AddDocument(projectId, "ThisFile", text, out documentId)
                   .GetDocument(documentId));
        }
コード例 #10
0
ファイル: LexCompiler.cs プロジェクト: lshain/LogWatch
        private Compilation CreateCompilation(string name, params SyntaxTree[] syntaxTrees)
        {
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib");
            var app      = new MetadataFileReference(typeof(LexLogFormat).Assembly.Location);

            var compilation = Compilation.Create(
                name,
                syntaxTrees: syntaxTrees,
                references: new[] { mscorlib, app },
                options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary, optimize: true));

            return(compilation);
        }
コード例 #11
0
        private EmitResult CompileToInternal(IEnumerable <JSchema> schemas, Stream stream, string rootNamespace = null)
        {
            var syntaxTree = GetSyntaxTree(schemas, rootNamespace);

            var compilation = Compilation.Create("test", new CompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                              .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
                              .AddReferences(MetadataReference.CreateAssemblyReference("System"))
                              .AddReferences(MetadataReference.CreateAssemblyReference("System.Core"))
                              .AddSyntaxTrees(syntaxTree);

            var result = compilation.Emit(stream);

            return(result);
        }
コード例 #12
0
        public CodeWalker()
        {
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib");

            appReflist.Add(mscorlib);

            // Find all the application API dll references files
            IEnumerable <String> appLibFiles = Directory.EnumerateFiles(IOFile.FolderPath,
                                                                        "*.dll", SearchOption.AllDirectories);

            foreach (var libFile in appLibFiles)
            {
                // Add application API libs by new MetadataFileReference(libFile)
                var reference = new MetadataFileReference(libFile);
                appReflist.Add(reference);
            }
        }
コード例 #13
0
ファイル: CodeAsData.cs プロジェクト: twolfe4/MetaProgramming
        private static Type BuildAndLoadModelTypesIntoAppDomain(string modelSourceCode)
        {
            var parseOptions = new ParseOptions(
                compatibility: CompatibilityMode.None,
                languageVersion: LanguageVersion.CSharp5,
                preprocessorSymbols: new string[] {});

            var syntaxTree = SyntaxTree.ParseText(modelSourceCode, options: parseOptions);

            if (syntaxTree.GetDiagnostics().Any())
            {
                ThrowError("Parsing failed", syntaxTree.GetDiagnostics());
            }

            var references = new[]
            {
                MetadataReference.CreateAssemblyReference(typeof(object).Assembly.FullName)
            };

            var modelDllName = string.Format("Model.{0}.dll", Guid.NewGuid());

            var compilation = Compilation.Create(
                outputName: modelDllName,
                options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary),
                syntaxTrees: new[] { syntaxTree },
                references: references);

            if (compilation.GetDiagnostics().Any())
            {
                ThrowError("Compilation failed", compilation.GetDiagnostics());
            }

            using (var stream = new FileStream(modelDllName, FileMode.OpenOrCreate))
            {
                var compileResult = compilation.Emit(stream);

                if (!compileResult.Success)
                {
                    ThrowError("Compilation emit failed", compileResult.Diagnostics);
                }
            }

            var compiledAssembly = Assembly.LoadFrom(Path.GetFullPath(modelDllName));

            return(compiledAssembly.GetTypes().Single(type => type.Name == "ProcessingModel"));
        }
コード例 #14
0
        private static ExecuteShaderDelegate JitCompileShader(ExecutableInstruction[] instructions)
        {
            var assemblyReferences = new[]
            {
                MetadataReference.CreateAssemblyReference("mscorlib"),
                new MetadataFileReference(typeof(Number4).Assembly.Location),
                new MetadataFileReference(typeof(VirtualMachine).Assembly.Location)
            };

            const string outputName = "SlimShader.VirtualMachine.Jitter.Generated";
            var          code       = ShaderCodeGenerator.Generate(instructions);

            var compilation = Compilation.Create(outputName)
                              .WithOptions(new CompilationOptions(OutputKind.DynamicallyLinkedLibrary, debugInformationKind: Roslyn.Compilers.Common.DebugInformationKind.Full))
                              .AddReferences(assemblyReferences)
                              .AddSyntaxTrees(SyntaxTree.ParseText(code));

            var moduleBuilder = AppDomain.CurrentDomain
                                .DefineDynamicAssembly(new AssemblyName(outputName),
                                                       AssemblyBuilderAccess.RunAndCollect)
                                .DefineDynamicModule(outputName);

            System.Diagnostics.Debug.Write(code);

            var compilationResult = compilation.Emit(moduleBuilder);

            if (!compilationResult.Success)
            {
                var errorMessage = string.Empty;
                foreach (var diagnostic in compilationResult.Diagnostics)
                {
                    errorMessage += diagnostic + Environment.NewLine;
                }
                throw new Exception(errorMessage);
            }

            var dynamicClass  = moduleBuilder.GetType("DynamicShaderExecutor", false, true);
            var dynamicMethod = dynamicClass.GetMethod("Execute");

            return((ExecuteShaderDelegate)dynamicMethod.CreateDelegate(typeof(ExecuteShaderDelegate)));
        }
コード例 #15
0
        public static List <string> CreateLibrary(string path, out Compilation compilation,
                                                  out List <StaticClassSource> staticClasses, out Dictionary <CodeLocation, StaticMethodSource> methodsMap,
                                                  out List <ClassSource> classes, out Dictionary <CodeLocation, ClassSource> classesMap)
        {
            var sourceFiles = Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories);

            var sources = new List <SyntaxTree>();

            compilation = Compilation.Create("DynamicLibraryAssembly", new CompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                          .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
                          .AddReferences(MetadataReference.CreateAssemblyReference("System"))
                          .AddReferences(MetadataReference.CreateAssemblyReference("System.Numerics"));

            foreach (var sourceFile in sourceFiles)
            {
                var src = SyntaxTree.ParseFile(sourceFile);
                compilation = compilation.AddSyntaxTrees(src);
                sources.Add(src);
            }

            var errors = compilation.GetDiagnostics().Where(d => d.Info.Severity == DiagnosticSeverity.Error)
                         .Select(d => d.Info.GetMessage()).ToList();

            staticClasses = new List <StaticClassSource>();
            methodsMap    = new Dictionary <CodeLocation, StaticMethodSource>();
            classes       = new List <ClassSource>();
            classesMap    = new Dictionary <CodeLocation, ClassSource>();

            if (errors.Any())
            {
                return(errors);
            }

            foreach (var syntaxTree in sources)
            {
                ParseSourceFile(compilation, syntaxTree.GetRoot(), staticClasses, methodsMap, classes, classesMap);
            }

            return(null);
        }
コード例 #16
0
        static void test1()
        {
            SyntaxTree tree = SyntaxTree.ParseFile(@"..\..\..\code\test.cs");

            var compilation = Compilation.Create("HelloWorld")
                              .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"))
                              .AddSyntaxTrees(tree);

            var model = compilation.GetSemanticModel(tree);

            var nameInfo = model.GetSymbolInfo(tree.GetRoot().Usings[0].Name);

            var systemSymbol = (NamespaceSymbol)nameInfo.Symbol;

            foreach (var ns in systemSymbol.GetNamespaceMembers())
            {
                Console.WriteLine(ns.Name);
            }

            //

            var helloWorldString = tree.GetRoot().DescendantNodes()
                                   .OfType <LiteralExpressionSyntax>()
                                   .First();

            var literalInfo = model.GetTypeInfo(helloWorldString);

            var stringTypeSymbol = (NamedTypeSymbol)literalInfo.Type;

            Console.Clear();
            foreach (var name in (from method in stringTypeSymbol.GetMembers().OfType <MethodSymbol>()
                                  where method.ReturnType == stringTypeSymbol &&
                                  method.DeclaredAccessibility == Accessibility.Public
                                  select method.Name).Distinct())
            {
                Console.WriteLine(name);
            }
        }
コード例 #17
0
        public void EnumerateSymbolsInCompilation()
        {
            string      file1       = "public class Animal { public virtual void MakeSound() { } }";
            string      file2       = "class Cat : Animal { public override void MakeSound() { } }";
            Compilation compilation = Compilation.Create("test")
                                      .AddSyntaxTrees(SyntaxTree.ParseText(file1), SyntaxTree.ParseText(file2))
                                      .AddReferences(MetadataReference.CreateAssemblyReference("mscorlib"));

            NamespaceSymbol globalNamespace = compilation.SourceModule.GlobalNamespace;

            StringBuilder sb = new StringBuilder();

            EnumSymbols(globalNamespace, symbol => sb.AppendLine(symbol.ToString()));

            Assert.AreEqual(@"<global namespace>
Animal
Animal.Animal()
Animal.MakeSound()
Cat
Cat.Cat()
Cat.MakeSound()
", sb.ToString());
        }
コード例 #18
0
ファイル: Program.cs プロジェクト: piotrosz/RoslynChart
        private static Compilation CreateTestCompilation()
        {
            SyntaxTree programTree  = SyntaxTree.ParseFile(@"..\..\Program.cs");
            SyntaxTree rewriterTree = SyntaxTree.ParseFile(@"..\..\TypeInferenceRewriter.cs");

            List <SyntaxTree> sourceTrees = new List <SyntaxTree>();

            sourceTrees.Add(programTree);
            sourceTrees.Add(rewriterTree);

            MetadataReference mscorlib        = MetadataReference.CreateAssemblyReference("mscorlib");
            MetadataReference roslynCompilers = MetadataReference.CreateAssemblyReference("Roslyn.Compilers");
            MetadataReference csCompiler      = MetadataReference.CreateAssemblyReference("Roslyn.Compilers.CSharp");

            List <MetadataReference> references = new List <MetadataReference>();

            references.Add(mscorlib);
            references.Add(roslynCompilers);
            references.Add(csCompiler);

            CompilationOptions compilationOptions = new CompilationOptions(OutputKind.ConsoleApplication);

            return(Compilation.Create("TransformationCS", compilationOptions, sourceTrees, references));
        }
コード例 #19
0
ファイル: TestRoslyn.cs プロジェクト: pkunze/visualmutator
        public void Process()
        {
            var tree = SyntaxTree.ParseText(execTemplate);

            CompilationUnitSyntax root = tree.GetRoot();
            var body =
                (from methodDeclaration in root.DescendantNodes().OfType <MethodDeclarationSyntax>()
                 where methodDeclaration.Identifier.ValueText == "Main"
                 select methodDeclaration).Single();

            /*
             *
             *         var block = body.Body.WithStatements(
             *             Syntax.LocalDeclarationStatement(
             *                 Syntax.VariableDeclaration(
             *                     Syntax.IdentifierName(Syntax.Token(SyntaxKind.IntKeyword)))
             *                         .AddVariables(Syntax.VariableDeclarator("x"))));
             */

            //  var block = body.Body.WithStatements(Syntax.ParseStatement("Dsa.Utility.Guard.ArgumentNull(null, null);").WithLeadingTrivia(Syntax.Tab));
            //    root = root.ReplaceNode(body.Body, block);

            var newTree = SyntaxTree.Create(root);

            Console.WriteLine(newTree.GetText());


            var comp = Compilation.Create("MyCompilation",
                                          new CompilationOptions(OutputKind.DynamicallyLinkedLibrary))
                       .AddSyntaxTrees(newTree)
                       .AddReferences(new MetadataFileReference(typeof(object).Assembly.Location))
                       .AddReferences(new MetadataFileReference(@"D:\PLIKI\Dropbox\++Inzynierka\VisualMutator\Projekty do testów\dsa-96133\Dsa\Dsa\bin\Debug\Dsa.dll"))
                       .AddReferences(new MetadataFileReference(@"C:\Users\SysOp\Documents\Visual Studio 2012\Projects\VisualMutator\VisualMutator\bin\x86\Debug\VisualMutator.dll"))
                       .AddReferences(MetadataReference.CreateAssemblyReference("System.Linq"));

            var outputFileName = Path.Combine(Path.GetTempPath(), "MyCompilation.dll");
            //   var ilStream = new FileStream(outputFileName, FileMode.OpenOrCreate);



            var memStream = new MemoryStream();

            var result = comp.Emit(memStream);

            //    memStream.Close();
            if (!result.Success)
            {
                var aggregate = result.Diagnostics.Select(a => a.Info.GetMessage() + " at line" + a.Location.GetLineSpan(false)).Aggregate((a, b) => a + "\n" + b);
                throw new InvalidProgramException(aggregate);
            }

            AppDomain.CurrentDomain.AssemblyResolve += MyResolver;

            AppDomain newDomain = AppDomain.CreateDomain("New Domain");

            AppDomainCreator foo = (AppDomainCreator)newDomain.CreateInstanceFromAndUnwrap(
                @"C:\Users\SysOp\Documents\Visual Studio 2012\Projects\VisualMutator\VisualMutator\obj\x86\Debug\VisualMutator.dll",
                typeof(AppDomainCreator).FullName);


            try
            {
                foo.Execute(memStream.ToArray());
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }



            //   Console.WriteLine(foo.TestRun(4));
            AppDomain.Unload(newDomain);
            //  Console.ReadLine();

            /*
             * AppDomainSetup domainSetup = new AppDomainSetup();
             * AppDomain domain = AppDomain.CreateDomain("PluginDomain", null, domainSetup);
             * var obj = domain.CreateInstanceAndUnwrap().CreateInstanceFromAndUnwrap(@"C:\Users\SysOp\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.exe", "ConsoleApplication1.Klasa1");
             *
             * var m = obj.GetType().GetMethod("Method1");
             *
             */
        }
コード例 #20
0
        /// <summary>
        /// Create an assembly from strings
        /// </summary>
        /// <param name="assemblyName">assembly name</param>
        /// <param name="files">files text</param>
        /// <param name="references">full name of referred assemblies</param>
        /// <param name="errors">compilation errors</param>
        /// <returns>Compiled assembly</returns>
        public Assembly CreateAssembly(string assemblyName, List <string> files, List <string> references, out List <string> errors)
        {
            var trees = files.Select(file => SyntaxTree.ParseText(file)).ToList();
            var refs  = references.Select(r => r.Contains(":") ? MetadataFileProvider.Default.GetReference(r) : MetadataReference.CreateAssemblyReference(r)).ToList();

            var compilation = Compilation.Create(
                assemblyName,
                syntaxTrees: trees,
                references: refs,
                options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary));

            var stream = new MemoryStream();
            var result = compilation.Emit(stream);

            if (result.Success)
            {
                errors = null;
                return(Assembly.Load(stream.ToArray()));
            }

            errors = result.Diagnostics.Select(alert => alert.Info.ToString()).ToList();
            return(null);
        }
コード例 #21
0
 static void Main(string[] args)
 {
     MetadataReference xunitReference = MetadataReference.CreateAssemblyReference("xunit.dll");
 }
コード例 #22
0
        /// <summary>
        /// Note that it leaves any calls to contract methods in their original locations,
        /// i.e., it does *not* extract contracts. That is up to the caller of this method.
        /// </summary>
        public static bool FileToUnitAndSourceLocationProvider(IMetadataHost host, string filename,
                                                               List <string> libPaths,
                                                               List <string> referencedAssemblies,
                                                               out IModule module,
                                                               out ISourceLocationProvider /*?*/ sourceLocationProvider)
        {
            var        text = File.ReadAllText(filename);
            SyntaxTree tree = SyntaxTree.ParseText(text, filename);
            // This ctor isn't implemented yet.
            //var mscorlib = new Roslyn.Compilers.AssemblyObjectReference(typeof(object).Assembly);
            var mscorlib = MetadataReference.CreateAssemblyReference("mscorlib"); // Roslyn takes care of resolving where it lives.
            var refs     = new List <MetadataReference>();

            refs.Add(mscorlib);
            foreach (var r in referencedAssemblies)
            {
                refs.Add(MetadataReference.CreateAssemblyReference(Path.GetFileNameWithoutExtension((r))));
            }

            var baseFileName = Path.GetFileNameWithoutExtension(filename);

            var defaultResolver = FileResolver.Default;
            var ar = new FileResolver(ReadOnlyArrayExtensions.AsReadOnly(libPaths.Select(lp => Path.GetFullPath(lp))), defaultResolver.KeyFileSearchPaths, defaultResolver.BaseDirectory, defaultResolver.ArchitectureFilter, defaultResolver.PreferredCulture);
            var c  = Compilation.Create(
                baseFileName
                , syntaxTrees: new SyntaxTree[] { tree }
                , references: refs
                , fileResolver: ar
                , options: new CompilationOptions(OutputKind.DynamicallyLinkedLibrary)
                );
            var diags = c.GetDiagnostics();

            if (diags.Count() > 0)
            {
                foreach (var diag in diags)
                {
                    Console.WriteLine(diag.ToString());
                }
                if (diags.Any(d => d.Info.Severity == DiagnosticSeverity.Error || d.Info.IsWarningAsError))
                {
                    module = Dummy.Module;
                    sourceLocationProvider = null;
                    return(false);
                }
            }
            //c = c.AddSyntaxTrees(tree); // Use this form to add another syntax tree to the same compilation (getting a new compilation since they're immutable)
            var binding = c.GetSemanticModel(tree);

            diags = binding.GetDiagnostics();
            if (diags.Count() > 0)
            {
                foreach (var d in diags)
                {
                    Console.WriteLine(d.ToString());
                }
                if (diags.Any(d => d.Info.Severity == DiagnosticSeverity.Error || d.Info.IsWarningAsError))
                {
                    module = Dummy.Module;
                    sourceLocationProvider = null;
                    return(false);
                }
            }
            ConvertRoslynToCCI(host, tree, binding, out module, out sourceLocationProvider);
            return(true);
        }