如何为razor文件创建CodeAnalysis分析器?

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

我正在创建自定义 roslyn 分析器,以便在我的项目中强制执行自定义代码样式规则。到目前为止,在 .cs 文件的 AI 生成器的帮助下进展顺利。但是我无法让分析器处理 .razor 文件。这是我现在拥有的:

public override void Initialize(AnalysisContext context)
{
    context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
    context.EnableConcurrentExecution();
    
    context.RegisterCompilationStartAction(compilationContext
        => compilationContext.RegisterSyntaxTreeAction(AnalyzeRazorFile));
}


private void AnalyzeRazorFile(SyntaxTreeAnalysisContext context)
{
    if (!context.Tree.FilePath.EndsWith(".razor") && !context.Tree.FilePath.EndsWith(".cshtml"))
        return;

    var sourceText = context.Tree.GetText();
    var lines = sourceText.Lines;

    var zz = CreateDiagnostic(
        Location.Create(context.Tree, context.Tree.GetText().Lines[0].Span));
    context.ReportDiagnostic(zz);
}

CreateDiagnostic
只是库存上的变形器
Diagnostic.Create

目的是验证是否已提出诊断,但这从未发生。我的分析器 csproj 看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <LangVersion>preview</LangVersion>
    <Nullable>enable</Nullable> 
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <PropertyGroup>
    <IsPackable>true</IsPackable>
    <IncludeBuildOutput>false</IncludeBuildOutput>
    <EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
    <NoWarn>RS2008</NoWarn>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Razor.Language" Version="6.0.35" />
    <PackageReference Include="Microsoft.CodeAnalysis" Version="4.11.0" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.11.0" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
  </ItemGroup>

  <!-- This ensures the library will be packaged as an analyzer -->
  <ItemGroup>
    <None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
  </ItemGroup>
</Project>

我研究了 dotnet 源,发现了一个应该适用于 razor 的分析器这里。它看起来很相似,但是我找不到其他示例(而且我知道有很多 razor 分析器,因为我在 Blazor 中看到过它们),这让我认为可能是由于 razor 预编译 roslyn 分析器可能导致不被完全支持。如果是这种情况,如何提供诊断?

razor roslyn
1个回答
0
投票

从 Roslyn 分析器的角度来看,Razor 文件不是语法树,而是通过 RegisterAdditionalFileAction (或类似方法)公开的“附加文件”。

© www.soinside.com 2019 - 2024. All rights reserved.