Exemplo n.º 1
0
        public static async Task <(Document, Compilation)> CreateInMemoryProject(string projectName, string code)
        {
            var references = ReferenceAssemblies.Net50.ToList();

            references.AddRange(new[]
            {
                MetadataReference.CreateFromFile(typeof(Throw).Assembly.Location),
                MetadataReference.CreateFromFile(typeof(BaseMigration).Assembly.Location),
            });

            var projectId    = ProjectId.CreateNewId(projectName);
            var codeFileName = $"{projectName}Source.cs";
            var codeFileId   = DocumentId.CreateNewId(projectId, codeFileName);
            var project      = new AdhocWorkspace().CurrentSolution
                               .AddProject(projectId, projectName, projectName, LanguageNames.CSharp)
                               .AddMetadataReferences(projectId, references)
                               .AddDocument(codeFileId, codeFileName, SourceText.From(code))
                               .AddBaseMigrationClass(projectId)
                               .GetProject(projectId) !
                               .WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
            var document    = project.GetDocument(codeFileId) !;
            var compilation = (await project.GetCompilationAsync()) !;

            return(document, compilation);
        }
Exemplo n.º 2
0
        static ImplementationFactoryTestsBase()
        {
            var    thisAssembly = typeof(ImplementationFactoryTestsBase).Assembly;
            string dotNetDir    = Path.GetDirectoryName(typeof(object).GetTypeInfo().Assembly.Location);

            // For actually executing code, we need to reference the compiled test assembly, so that the types we're seeing at the same
            // types as the ones the unit tests are seeing.
            // However, this doesn't give us source locations, which we need in order to test diagnostics. So for testing these, we include
            // the test project's files as source, rather than referencing the test project.

            var executionProject = new AdhocWorkspace()
                                   .AddProject("Execution", LanguageNames.CSharp)
                                   .WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
                                                           .WithSpecificDiagnosticOptions(new KeyValuePair <string, ReportDiagnostic>[]
            {
                KeyValuePair.Create("CS1701", ReportDiagnostic.Suppress),
                KeyValuePair.Create("CS1702", ReportDiagnostic.Suppress),
            })
                                                           .WithNullableContextOptions(NullableContextOptions.Enable))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "netstandard.dll")))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Runtime.dll")))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Net.Http.dll")))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Collections.dll")))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Linq.Expressions.dll")))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(typeof(RestClient).Assembly.Location))
                                   .AddMetadataReference(MetadataReference.CreateFromFile(thisAssembly.Location));

            executionCompilation = executionProject.GetCompilationAsync().Result;

            var diagnosticsProject = new AdhocWorkspace()
                                     .AddProject("Diagnostics", LanguageNames.CSharp)
                                     .WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary)
                                                             .WithNullableContextOptions(NullableContextOptions.Enable))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(typeof(object).Assembly.Location))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "netstandard.dll")))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Runtime.dll")))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Net.Http.dll")))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(Path.Join(dotNetDir, "System.Linq.Expressions.dll")))
                                     .AddMetadataReference(MetadataReference.CreateFromFile(typeof(RestClient).Assembly.Location));

            diagnosticsCompilation = diagnosticsProject.GetCompilationAsync().Result;

            var syntaxTrees = new List <SyntaxTree>();

            foreach (string resourceName in thisAssembly.GetManifestResourceNames())
            {
                if (resourceName.EndsWith(".cs"))
                {
                    using (var reader = new StreamReader(thisAssembly.GetManifestResourceStream(resourceName)))
                    {
                        syntaxTrees.Add(SyntaxFactory.ParseSyntaxTree(reader.ReadToEnd()));
                    }
                }
            }

            diagnosticsCompilation = diagnosticsCompilation.AddSyntaxTrees(syntaxTrees);
        }
Exemplo n.º 3
0
        public void Test1()
        {
            var file = $"{TestContext.CurrentContext.TestDirectory}/../../../TestRoslyn.cs";
            var assemblies = new[] { typeof(object), typeof(Enumerable), typeof(TestAttribute) }.Select(x => x.Assembly.Location).ToArray();

            var project = new AdhocWorkspace().AddProject("test", LanguageNames.CSharp);

            project = project.AddDocument(Path.GetFileName(file), File.ReadAllText(file)).Project;
            project = project.AddMetadataReferences(assemblies.Select(x => MetadataReference.CreateFromFile(x)));

            var compilation = project.GetCompilationAsync().GetAwaiter().GetResult();
            var c           = compilation.WithAnalyzers(ImmutableArray.Create((DiagnosticAnalyzer) new AssertEqualsAnalyzer()));
            var diagnostics = c.GetAnalyzerDiagnosticsAsync().GetAwaiter().GetResult();
        }
        public static async Task <(Document, Compilation)> CreateLightGuardClausesDllInMemory(string projectName, string code)
        {
            var projectId    = ProjectId.CreateNewId(projectName);
            var codeFileName = $"{projectName}Source.cs";
            var codeFileId   = DocumentId.CreateNewId(projectId, codeFileName);
            var project      = new AdhocWorkspace().CurrentSolution
                               .AddProject(projectId, projectName, projectName, LanguageNames.CSharp)
                               .AddMetadataReferences(projectId, AllReferences)
                               .AddDocument(codeFileId, codeFileName, SourceText.From(code))
                               .AddThrowClass(projectId)
                               .GetProject(projectId)
                               .WithCompilationOptions(new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
            var document    = project.GetDocument(codeFileId);
            var compilation = await project.GetCompilationAsync();

            return(document, compilation);
        }