Luc*_*key 7 c# razor roslyn-code-analysis
我的团队决定,他们希望采用自动化来强制执行 .razor 文件中的编码指南。由于我们已经在使用 StyleCopAnalyzers,我可能会实现我们自己的分析器来实现此目标。
为了更好地让您理解我的想法,请考虑以下示例。
令以下为有效代码:
<MyGrid>
<MyItem></MyItem>
<MyItem></MyItem>
<MyItem></MyItem>
</MyGrid>
Run Code Online (Sandbox Code Playgroud)
现在,如果有人不封装<MyItem>它<MyGrid>,分析器会报告类似“ MyItemshould be direct child of a MyGrid”的诊断信息。
首先,我遵循了微软的教程:编写你的第一个分析器和代码修复。这非常有效。
但是,我的下一步是使用默认模板创建示例 Blazor WASM 应用程序。当我在示例 Blazor 应用程序上执行时MakeConstAnalyzer,我会得到以下行为。
修改Program.cs如下:
public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
// I get squiggly lines here with the expected analyzer message from the MakeConstAnalyzer
int bla = 0;
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await builder.Build().RunAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
但修改Counter.razor如下:
private void IncrementCount()
{
int bla = 0; // add this line
currentCount++;
}
Run Code Online (Sandbox Code Playgroud)
现在,这不会显示分析器消息。当然,这会触发编译器警告,但这主要告诉我,由于某种原因,分析器没有在文件上执行
Counter.razor。
Microsoft.CodeAnalysis.Razor我想,我应该在这里提一下。我在 Nuget 上找到了它并尝试将其集成到示例中。
警告
我不知道,如果包的目的甚至是远程连接到我想要实现的目标,因为我真的没有找到任何文档。
由于微软教程明确指出,任何分析器都必须以某种方式继承DiagnosticAnalyzer,我还检查了包的实现。但在两者中,Microsoft.CodeAnalysis.Razor和Microsoft.AspNetCore.Razor.LanguagePackage 都没有继承自 的类DiagnosticAnalyzer。
我还尝试装饰我的分析器,以指定它还应该解析 *.razor 文件,如下所示:
[DiagnosticAnalyzer(LanguageNames.CSharp, Microsoft.CodeAnalysis.Razor.RazorLanguage.Name)]
Run Code Online (Sandbox Code Playgroud)
此时,我不知道还能尝试什么。我也没有在网上找到任何类似的东西。
这些是我的问题:
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |