#c# #.net-core #roslyn
#c# #.net-ядро #рослин #roslyn
Вопрос:
Я использую roslyn в проекте .NET Core 3.1, и он анализирует ASP.NET решение. The ASP.NET решением является вызов функции MyTestMethod, которая находится в проекте, на который ссылается .Net FW 4.6.2. При выполнении следующего кода для функции он не возвращает местоположение ссылки в ASP.NET решение. Однако, если я вызываю ту же функцию, например, в тестовом проекте, местоположение успешно обнаружено.
var symbol = semanticModel.GetDeclaredSymbol(node);
var references = SymbolFinder.FindReferencesAsync(symbol, solution).Resu<
Может ли эта проблема быть связана с использованием .net core с Roslyn?
Есть предложения, как я мог бы протестировать это дальше, чтобы сузить причину проблемы?
На случай, если это имеет значение, я также использую Buildalyzer.Рабочие области в проекте Roslyn.
[ОБНОВЛЕНИЕ] Я получаю следующие ошибки на основе диагностики, но я не уверен, влияет ли это на синтаксический анализ ссылок, потому что я получаю эту ошибку также для ссылки в тестовом проекте, который работает.
C:rootMySolutionMyBllRefProjectBll.cs(7,14): error CS0234: The type or namespace name 'MyNamespace' does not exist in the namespace 'MyAssembly' (are you missing an assembly reference?)
C:rootMySolutionMyBllRefProjectOtherLogic.cs(629,32): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
C:rootMySolutionMyBllRefProjectOtherLogic.cs(629,25): error CS0012: The type 'Action<>' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
C:rootMySolutionMyBllRefProjectConfigAutoMapperBootstrap.cs(17,20): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
C:rootMySolutionMyBllRefProjectDAL.cs(265,29): error CS0103: The name 'SQLHelper' does not exist in the current context
C:rootMySolutionMyBllRefProjectDAL.cs(296,29): error CS0103: The name 'SQLHelper' does not exist in the current context
Вот как создается компиляция (упрощенная)
var workspace = new AnalyzerManager(Solution).GetWorkspace();
var solution = workspace.CurrentSolution;
foreach (var file in p.Documents)
{
// Get syntax tree for file
var tree = file.GetSyntaxTreeAsync().Resu<
// Get root of syntax tree
var root = (CompilationUnitSyntax)tree.GetRoot();
// Get project compilation for symbolic relationship in assembly
var compilation = p.GetCompilationAsync().Resu<
// Get semantic model based on project compilation and the current document tree
var semanticModel = compilation.GetSemanticModel(tree);
// Get all methods from the file
var methodReferences = GetMethodReferences(solution, semanticModel, file, tree);
// do some more stuff
}
Комментарии:
1. В первую очередь вам пришлось бы поделиться кодом того, как вы получаете рабочее пространство.