コード例 #1
0
        public static void LoadSemanticModels()
        {
            if (string.IsNullOrWhiteSpace(TestClass?.ClassLibrary))
            {
                throw new InvalidOperationException("Set Class Library Path");
            }

            if (TestClass?.Claz == null)
            {
                throw new InvalidOperationException("Class Syntax Tree is missing");
            }

            var assemblyDir        = Directory.GetParent(TestClass.ClassLibrary);
            var allAssembliesFiles = assemblyDir.GetFiles("*.dll", SearchOption.AllDirectories);
            var metaDataList       = new List <MetadataReference>(CommonReferences);

            metaDataList
            .AddRange(allAssembliesFiles
                      .Select(file => MetadataReference.CreateFromFile(file.FullName)));

            var trees = TestClass.PartialClasses.Select(c => c.Claz.Syntax.Root().SyntaxTree).ToList();
            CSharpCompilation compilation = CSharpCompilation.Create("HelloWorld")
                                            .AddReferences(metaDataList)
                                            .AddSyntaxTrees(trees);

            foreach (var partialClass in TestClass.PartialClasses)
            {
                var tree          = partialClass.Claz.Syntax.Root().SyntaxTree;
                var semanticModel = compilation.GetSemanticModel(tree);
                if (!SemanticModels.ContainsKey(partialClass.FilePath))
                {
                    SemanticModels.Add(partialClass.FilePath, semanticModel);
                }

                LoadUnusedVariables(tree, partialClass, semanticModel);
            }
        }
コード例 #2
0
 public static void UnLoadSemanticModels()
 {
     SemanticModels.Clear();
 }