【发布时间】:2015-06-28 08:37:11
【问题描述】:
我正在尝试检测模型是否作为参数传递给 MVC 应用程序的控制器中的函数。我为 Roslyn 诊断分析器编写了代码。当断点按预期命中时,代码背后的逻辑工作正常。但是警告方面的诊断结果并没有反映在打开的visual studio实例中。
这是我的诊断分析器的代码 sn-p:
public override void Initialize(AnalysisContext context)
{
// TODO: Consider registering other actions that act on syntax instead of or in addition to symbols
context.RegisterSyntaxNodeAction(AnalyzeSymbol, SyntaxKind.MethodDeclaration);
}
private async static void AnalyzeSymbol(SyntaxNodeAnalysisContext context)
{
var method = (MethodDeclarationSyntax)context.Node;
ParameterListSyntax ParamList = method.ParameterList;
int flag = 0;
string ParamName = null;
foreach (ParameterSyntax Param in ParamList.Parameters)
{
if (Param.Type.ToString().Contains("Model"))
{
ParamName = Param.Type.ToString();
flag = 1;
break;
}
}
if (flag == 0)
return;
string solutionPath = @"C:\Users\Administrator\Documents\Visual Studio 2015\Projects\WebApplication6\WebApplication6.sln";
var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(solutionPath);
foreach (var project in solution.Projects)
{
foreach (var document in project.Documents)
{
CancellationToken source = default(CancellationToken);
SyntaxNode root = await document.GetSyntaxRootAsync(source);
var classDeclarations = root.DescendantNodes().Where(n => n.IsKind(SyntaxKind.ClassDeclaration));
flag = 0;
foreach (ClassDeclarationSyntax cls in classDeclarations)
{
if (cls.Identifier.Text.ToString() == ParamName)
{
var diagnostic = Diagnostic.Create(Rule, method.GetLocation());
context.ReportDiagnostic(diagnostic);
}
}
}
}
}
【问题讨论】:
-
测试实例的错误或输出窗格中没有信息?
-
@JeroenVannevel 没有错误。但程序在输出窗口中显示以下异常: 抛出异常:System.Core.dll 中的“System.InvalidOperationException” 抛出异常:mscorlib.dll 中的“System.IO.FileLoadException” 抛出异常:“System.Threading.Tasks.TaskCanceledException”在 mscorlib.dll 中抛出:'System.Runtime.InteropServices.InvalidComObjectException' in mscorlib.dll
-
您确定您拥有正确版本的分析器模板吗?您需要有一个与您安装的 VS 2015 相匹配的那个(即,如果您使用的是 RC,那么有 RC 模板)。此外,请确认您的分析器已安装在实例或项目中。
-
您是否在
WebApplication6.sln上运行您的分析仪?在已构建的解决方案上打开 MSBuildWorkspace 时可能会遇到问题。 -
@JoshVarty 是的,我在不同的解决方案上运行分析器。
标签: c# visual-studio visual-studio-2015 roslyn