private ISemanticModel GetSemanticModelFromSyntaxTree(CommonSyntaxTree syntaxTree, string code, bool includeDocumentation = false) { _systemXmlFilesDir = GetSystemXmlFilesDir(); MetadataReference mscorlib = CreateMetadataReference("mscorlib", includeDocumentation); var metaDllReferences = new List<MetadataReference> {mscorlib}; if (this.Language == Language.VbNet) { //Need to add vb or getting error //Requested operation is not available because the runtime library function 'Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute..ctor' is not defined. MetadataReference vb = CreateMetadataReference("Microsoft.VisualBasic", includeDocumentation); metaDllReferences.Add(vb); } //Eric: this doesn't seem to work so using mscorlib only for now. List<string> gacDlls = GetGacDlls(code); foreach (string dllName in gacDlls) { string dllNameWithoutExtension = dllName.Substring(0, dllName.Length - 4); //remove .dll MetadataReference metaRef = CreateMetadataReference(dllNameWithoutExtension, includeDocumentation); metaDllReferences.Add(metaRef); } Dictionary <string, string> nugGetXmlFileNameToPath = new Dictionary<string, string>(); if (includeDocumentation) foreach (var nuGetxmlFilePath in NuGetXmlFileReferences) { string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(nuGetxmlFilePath); nugGetXmlFileNameToPath[fileNameWithoutExtension] = nuGetxmlFilePath; } foreach (var path in GetNonGacDlls()) { string fileName = Path.GetFileNameWithoutExtension(path); RoslynDocumentationProvider documentationProvider = null; if (includeDocumentation && nugGetXmlFileNameToPath.ContainsKey(fileName)) documentationProvider = new RoslynDocumentationProvider(nugGetXmlFileNameToPath[fileName]); var reference = new MetadataFileReference(path, MetadataReferenceProperties.Assembly, documentationProvider); metaDllReferences.Add(reference); } //http://msdn.microsoft.com/en-us/vstudio/hh500769.aspx#Toc306015688 CommonCompilation compilation = this.CreateCompilation("Compilation_For_AutoComplete", syntaxTrees: new[] {syntaxTree}, matadataReferences: metaDllReferences); ISemanticModel semanticModel = compilation.GetSemanticModel(syntaxTree); return semanticModel; }
private MetadataReference CreateMetadataReference(string assemblyDisplayName, bool includeDocumentation) { string assemblyFullPath = FileResolver.Default.ResolveAssemblyName(assemblyDisplayName); string xmlFile = Path.Combine(_systemXmlFilesDir, assemblyDisplayName + ".xml"); RoslynDocumentationProvider documentationProvider = null; if (includeDocumentation) documentationProvider = new RoslynDocumentationProvider(xmlFile); return new MetadataFileReference(assemblyFullPath, MetadataReferenceProperties.Assembly, documentationProvider); }