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); } }
public static void UnLoadSemanticModels() { SemanticModels.Clear(); }