public void Test_WorkspaceChanges()
        {
            var workspace = new TestWorkspace();
            var solution = workspace.CurrentSolution;
            var project1 = workspace.AddProject("P1");
            var graph = ProjectDependencyService.GetDependencyGraphAsync(workspace.CurrentSolution, CancellationToken.None).Result;
            var project2 = workspace.AddProject("P2");
            graph = ProjectDependencyService.GetDependencyGraphAsync(workspace.CurrentSolution, CancellationToken.None).Result;
            var sortedProjects = graph.GetTopologicallySortedProjects();
            AssertEx.SetEqual(sortedProjects, project1, project2);
            
            Project ps = workspace.CurrentSolution.GetProject(project1);
            int startCount = ps.MetadataReferences.Count;

            var source2 = @"
using System;
public class X
{
}
";
            MetadataReference comp1 = CreateCSharpCompilation(source2).ToMetadataReference();            
            workspace.OnMetadataReferenceAdded(project1, comp1);
            workspace.OnAssemblyNameChanged(project1, "ChangedP1");
            
            Assert.False(ps.CompilationOptions.CheckOverflow);
            CompilationOptions co = new CSharp.CSharpCompilationOptions(outputKind: OutputKind.DynamicallyLinkedLibrary, checkOverflow: true);            
            workspace.OnCompilationOptionsChanged(project1, co);
            
            ps = workspace.CurrentSolution.GetProject(project1);
            Assert.Equal(startCount + 1, ps.MetadataReferences.Count);
            Assert.Equal(ps.AssemblyName, "ChangedP1");
            Assert.True(ps.CompilationOptions.CheckOverflow);            
        }
Exemplo n.º 2
0
 protected CSharp.CSharpCompilation CreateCSharpCompilation(
     string code,
     CSharp.CSharpParseOptions parseOptions             = null,
     CSharp.CSharpCompilationOptions compilationOptions = null,
     string assemblyName = null,
     IEnumerable <MetadataReference> referencedAssemblies = null)
 {
     return(CreateCSharpCompilation(assemblyName, code, parseOptions, compilationOptions, referencedAssemblies, referencedCompilations: null));
 }
Exemplo n.º 3
0
        protected CSharp.CSharpCompilation CreateCSharpCompilation(
            string assemblyName,
            string code,
            CSharp.CSharpParseOptions parseOptions               = null,
            CSharp.CSharpCompilationOptions compilationOptions   = null,
            IEnumerable <MetadataReference> referencedAssemblies = null,
            IEnumerable <Compilation> referencedCompilations     = null
            )
        {
            if (assemblyName == null)
            {
                assemblyName = GetUniqueName();
            }

            if (parseOptions == null)
            {
                parseOptions = CSharp.CSharpParseOptions.Default
                               .WithLanguageVersion(CSharp.LanguageVersion.Default)
                               .WithDocumentationMode(DocumentationMode.None);
            }

            if (compilationOptions == null)
            {
                compilationOptions = new CSharp.CSharpCompilationOptions(
                    OutputKind.DynamicallyLinkedLibrary
                    );
            }

            var references = new List <MetadataReference>();

            if (referencedAssemblies == null)
            {
                references.Add(MscorlibRef);
                references.Add(SystemRef);
                references.Add(SystemCoreRef);
                //TODO: references.Add(MsCSRef);
                references.Add(SystemXmlRef);
                references.Add(SystemXmlLinqRef);
            }
            else
            {
                references.AddRange(referencedAssemblies);
            }

            AddReferencedCompilations(referencedCompilations, references);

            var tree = CSharp.SyntaxFactory.ParseSyntaxTree(code, options: parseOptions);

            return(CSharp.CSharpCompilation.Create(
                       assemblyName,
                       new[] { tree },
                       references,
                       compilationOptions
                       ));
        }
        public void Test_WorkspaceChanges()
        {
            var workspace = new TestWorkspace();
            var solution  = workspace.CurrentSolution;
            var project1  = workspace.AddProject("P1");
            var graph     = ProjectDependencyService.GetDependencyGraphAsync(workspace.CurrentSolution, CancellationToken.None).Result;
            var project2  = workspace.AddProject("P2");

            graph = ProjectDependencyService.GetDependencyGraphAsync(workspace.CurrentSolution, CancellationToken.None).Result;
            var sortedProjects = graph.GetTopologicallySortedProjects();

            AssertEx.SetEqual(sortedProjects, project1, project2);

            Project ps         = workspace.CurrentSolution.GetProject(project1);
            int     startCount = ps.MetadataReferences.Count;

            var source2             = @"
using System;
public class X
{
}
";
            MetadataReference comp1 = CreateCSharpCompilation(source2).ToMetadataReference();

            workspace.OnMetadataReferenceAdded(project1, comp1);
            workspace.OnAssemblyNameChanged(project1, "ChangedP1");

            Assert.False(ps.CompilationOptions.CheckOverflow);
            CompilationOptions co = new CSharp.CSharpCompilationOptions(outputKind: OutputKind.DynamicallyLinkedLibrary, checkOverflow: true);

            workspace.OnCompilationOptionsChanged(project1, co);

            ps = workspace.CurrentSolution.GetProject(project1);
            Assert.Equal(startCount + 1, ps.MetadataReferences.Count);
            Assert.Equal(ps.AssemblyName, "ChangedP1");
            Assert.True(ps.CompilationOptions.CheckOverflow);
        }
        protected CSharp.CSharpCompilation CreateCSharpCompilation(
            string assemblyName,
            string code,
            CSharp.CSharpParseOptions parseOptions = null,
            CSharp.CSharpCompilationOptions compilationOptions = null,
            IEnumerable<MetadataReference> referencedAssemblies = null,
            IEnumerable<Compilation> referencedCompilations = null)
        {
            if (assemblyName == null)
            {
                assemblyName = GetUniqueName();
            }

            if (parseOptions == null)
            {
                parseOptions = CSharp.CSharpParseOptions.Default.WithDocumentationMode(DocumentationMode.None);
            }

            if (compilationOptions == null)
            {
                compilationOptions = new CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);
            }

            var references = new List<MetadataReference>();
            if (referencedAssemblies == null)
            {
                references.Add(MscorlibRef);
                references.Add(SystemRef);
                references.Add(SystemCoreRef);
                //TODO: references.Add(MsCSRef);
                references.Add(SystemXmlRef);
                references.Add(SystemXmlLinqRef);
            }
            else
            {
                references.AddRange(referencedAssemblies);
            }

            AddReferencedCompilations(referencedCompilations, references);

            var tree = CSharp.SyntaxFactory.ParseSyntaxTree(code, options: parseOptions);

            return CSharp.CSharpCompilation.Create(assemblyName, new[] { tree }, references, compilationOptions);
        }
Exemplo n.º 6
0
        public void ConsistentParseOptions()
        {
            var tree1 = SyntaxFactory.ParseSyntaxTree("", CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp6));
            var tree2 = SyntaxFactory.ParseSyntaxTree("", CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp6));
            var tree3 = SyntaxFactory.ParseSyntaxTree("", CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.CSharp5));

            var assemblyName = GetUniqueName();
            var compilationOptions = new CSharp.CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary);
            CSharp.CSharpCompilation.Create(assemblyName, new[] { tree1, tree2 }, new[] { MscorlibRef }, compilationOptions);
            Assert.Throws(typeof(ArgumentException), () =>
            {
                CSharp.CSharpCompilation.Create(assemblyName, new[] { tree1, tree3 }, new[] { MscorlibRef }, compilationOptions);
            });
        }