【发布时间】:2019-06-10 17:40:55
【问题描述】:
我目前正在尝试查找 .ExecuteSqlCommand 的调用并检查传递给 sql 参数的第一个值。
这是我在代码库中发现的差异的示例。
ExecuteSqlCommand("[sql statement here]");
对比
var sql = "sql statement";
ExecuteSqlCommand(sql);
到目前为止,我有这个:
var invocations = root.DescendantNodes()
.OfType<InvocationExpressionSyntax>()
.Select(ie => ModelExtensions.GetSymbolInfo(model, ie).Symbol)
.Where(symbol => symbol != null && symbol.Name == "ExecuteSqlCommand");
foreach (var invocation in invocations)
{
var method = (IMethodSymbol)invocation;
foreach (var param in method.Parameters)
{
//I can't quite seem to get information from IParameterSymbol about whether the param is a string literal, or a reference to a string via a variable.
}
}
如果参数不是字符串,而是 var,那么我需要获取 var 的值(与运行时定义的一样多)。
我不太确定这是 SemanticModel 还是 SyntaxTree 的工作,但我的猜测是 SemanticModel 应该拥有我需要的更丰富的信息,让我发现我在寻找什么。
我的总体目标是询问传递给 ExecuteSqlCommand 方法的 sql。
谢谢!
【问题讨论】:
标签: c# roslyn roslyn-code-analysis