I have 2 test projects in solution.
The first project ("VDoc") declares a VDocQuery type.
The second project ("VDocQueryTest") calls the VDocQuery constructor.
I get 2 VDocQuery ITypeSymbol (one from each project), compare it, but get a false result.
Steps:
1. Get the first ITypeSymbol (from the VDoc project using the SemanticModel.LookupNamespacesAndTypes () method).
2. Get the second ITypeSymbol from the VDocQueryTest project (from ObjectCreationExpressionSyntax.GetTypeInfo (). Type)
3. Compare it with ITypeSymbol.Equals (ITypeSymbol).
I expected a true result, but I get a false result.
Question: How to compare ITypeSymbols from different projects within the same solution?
Code example:

class Program { static void Main(string[] args) { string solutionPath = @"..\..\..\StaticAnalysis.sln"; MSBuildWorkspace workspace = MSBuildWorkspace.Create(); Solution solution = workspace.OpenSolutionAsync(solutionPath).Result; var vdocProject = FindProjectByName("VDoc", solution); SemanticModel semanticModel = vdocProject.Documents.First().GetSemanticModelAsync().Result; var nsVDocQueryFunctionalTest = (INamespaceOrTypeSymbol)semanticModel.LookupNamespacesAndTypes(0, null, "VDocQueryFunctionalTest").First(); var tVDocQuery = (ITypeSymbol)semanticModel.LookupNamespacesAndTypes(0, nsVDocQueryFunctionalTest, "VDocQuery").First(); TypeInfo ti = GetFromVDocRef(solution); bool result1 = ti.Type.Equals(tVDocQuery);
VDocQuery.cs:
using System.Collections.Generic; namespace VDocQueryFunctionalTest { public class VDocQuery { public VDocQuery() { } public void AddFields(string docType, params string[] fields) { } public List<VDoc> Execute() { return null; } } }
VDocQueryUse.cs:
using VDocQueryFunctionalTest; namespace VDocQueryTest { static class VDocQueryUse { public static void VDocQueryUseTest() { new VDocQuery(); } } }
c # roslyn
Alex sedow
source share