SemanticModel.GetOperation 返回OperationKind.Invalid

问题描述 投票:0回答:1

我们正在尝试使用 Roslyn API 来分析现有应用程序,以便能够编写工具来评估其质量。

在下面的代码中,我们尝试使用 API 来获取通过 async/await 调用调用的特定方法的

IOperation

if (toEvaluate is AwaitExpressionSyntax awaitExpressionSyntax)
{
   if (awaitExpressionSyntax.Expression is InvocationExpressionSyntax invocationExpressionSyntax)
   {
      var operation = semanticModel.GetOperation(invocationExpressionSyntax);

      // Analyse the operation
   }
}

我们在大多数情况下都看到这种工作方式,但对于一个特定的方法调用

GetOperation
会返回一个
IOperation
,其中
Kind
OperationKind.Invalid

由于我们正在分析工作应用程序中的代码,因此我们知道代码本身并不是无效的。

什么会导致

GetOperation
返回
OperationKind.Invalid

是否有任何调试信息可以用来了解什么操作被视为无效?

.net roslyn roslyn-code-analysis
1个回答
0
投票

最后,通过查看

semanticModel.GetDiagnostics()
的输出,我们能够得到一些关于问题所在的线索,这表明模型缺少对
netstandard.dll
的引用。

添加缺失的 DLL 似乎确实解决了问题。

尚不完全清楚为什么这对其他方法有效,甚至对于

semanticModel.GetOperation(invocationExpressionSyntax)
成功返回的方法(即
OperationKind
不是
Invalid
),诊断中的错误仍然存在。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.