Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Most of the Blazor rules do not work against App on .net 8.0 #703

Closed
lksr-demant opened this issue Mar 7, 2024 · 7 comments · Fixed by #704
Closed

Most of the Blazor rules do not work against App on .net 8.0 #703

lksr-demant opened this issue Mar 7, 2024 · 7 comments · Fixed by #704

Comments

@lksr-demant
Copy link

Version of the Meziantou.Analyzer NuGet package

2.0.145

Rule Identifier

MA0115

Target Framework

net8.0

C# Language version

C#12

Description

Hi,
I'm trying to setup Meziantou.Analyzer for Blazor project on .net 8.0. It seems that some of the rules (MA0115, MA0116, MA0122, MA0119, MA0120) do not work. When I check them against project on .net 7.0 at least MA0115 works fine.

PS: I downloaded your code on my machine and assure that it compiles and all UnitTests (also for MA0115) passes.

Reproduction Steps

Minimal code:

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
    <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Meziantou.Analyzer" Version="2.0.145">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.2" />
  </ItemGroup>

</Project>

Other information

No response

@meziantou
Copy link
Owner

  • Which version of the SDK do you use? (dotnet --info)
  • Are the rules reported when using dotnet build?

@lksr-demant
Copy link
Author

Hi,
at least MA0117 and MA0118 works fine
image

Generated from code like

@code {

    [SupplyParameterFromQuery] // MA0116: Missing [Parameter] attribute - DO NOT WORK
    public string? Value2 { get; set; }

    [EditorRequired] // MA0117: Missing [Parameter] attribute - WORKS
    public string? Value { get; set; }

    [JSInvokable] // MA0118: The method must be public - WORKS
    internal static int[] ReturnArray()
    {
        return [1, 2, 3];
    }
}

Which is strange because from what I see in your repo both MA0116 and MA0117 comes from one Analyzer class ParameterAttributeForRazorComponentAnalyzer. When I use same code in project with .net 7.0 then all works fine!


λ dotnet --info
.NET SDK:
Version: 8.0.200
Commit: 438cab6a9d
Workload version: 8.0.200-manifests.e575128c

Runtime Environment:
OS Name: Windows
OS Version: 10.0.19045
OS Platform: Windows
RID: win-x64
Base Path: C:\Program Files\dotnet\sdk\8.0.200\

.NET workloads installed:
[android]
Installation Source: VS 17.9.34622.214, VS 17.9.34310.174
Manifest Version: 34.0.52/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.android\34.0.52\WorkloadManifest.json
Install Type: Msi

[maui-windows]
Installation Source: VS 17.9.34622.214, VS 17.9.34310.174
Manifest Version: 8.0.6/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.maui\8.0.6\WorkloadManifest.json
Install Type: Msi

[maccatalyst]
Installation Source: VS 17.9.34622.214, VS 17.9.34310.174
Manifest Version: 17.2.8004/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.maccatalyst\17.2.8004\WorkloadManifest.json
Install Type: Msi

[ios]
Installation Source: VS 17.9.34622.214, VS 17.9.34310.174
Manifest Version: 17.2.8004/8.0.100
Manifest Path: C:\Program Files\dotnet\sdk-manifests\8.0.100\microsoft.net.sdk.ios\17.2.8004\WorkloadManifest.json
Install Type: Msi

Host:
Version: 8.0.2
Architecture: x64
Commit: 1381d5ebd2

.NET SDKs installed:
7.0.116 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
8.0.200 [C:\Program Files\dotnet\sdk]

.NET runtimes installed:
Microsoft.AspNetCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.27 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 7.0.16 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 8.0.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.27 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 7.0.16 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.NETCore.App 8.0.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.1.32 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.25 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 6.0.27 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.14 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 7.0.16 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]
Microsoft.WindowsDesktop.App 8.0.2 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

Other architectures found:
x86 [C:\Program Files (x86)\dotnet]
registered at [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x86\InstallLocation]

@meziantou
Copy link
Owner

Can you try with the latest SDK (Version: 8.0.201)? I think it contains some fixes related to analyzers.

I'll try to reproduce the bug on my side later, maybe this weekend.

@meziantou
Copy link
Owner

Note that some rules such as MA0116 and MA0122 are not reported on .NET 8 as the attributes are now useless. More info: https://devblogs.microsoft.com/dotnet/asp-net-core-updates-in-dotnet-8-preview-6/?WT.mc_id=DT-MVP-5003978#cascade-query-string-values-to-blazor-components

On my machine the analyzer seems to work correctly on .NET 8 with the latest SDK. Could you provide a repro if you still have the issue?

@lksr-demant
Copy link
Author

lksr-demant commented Mar 11, 2024

Unfortunately after installing new SDK situation do not changes.

Repro steps:

  1. With this repository
    BlazorWithRoslynAnalyzersClean.zip

  2. Go into solution folder. From cmd execute "dotnet build"

  3. I get following errors. MA0115 and MA0116 are valid just for .net 7.0 project. Eventhough MA0116 is useless and not reporten on .net8.0 MA0115 still should work, right?

D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\Pages\Index.razor(13,20): error MA0117: Parameters with [EditorRequired] attributes should also be marked as [Parameter] (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0117.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\BlazorWithRoslynAnalyzers.Client.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\Program.cs(5,1): error MA0004: Use Task.ConfigureAwait(false) if the current SynchronizationContext is not needed (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0004.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\BlazorWithRoslynAnalyzers.Client.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\Pages\Index.razor(16,27): error MA0118: [JSInvokable] methods must be public (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0118.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzers\BlazorWithRoslynAnalyzers.Client\BlazorWithRoslynAnalyzers.Client.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\Pages\Index.razor(10,20): error MA0116: Parameters with [SupplyParameterFromQuery] attributes should also be marked as [Parameter] (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0116.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\BlazorApp7.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\Pages\Index.razor(13,20): error MA0117: Parameters with [EditorRequired] attributes should also be marked as [Parameter] (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0117.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\BlazorApp7.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\Microsoft.CodeAnalysis.Razor.Compiler.SourceGenerators\Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator\Pages_Index_razor.g.cs(104,13): error MA0115: The parameter 'Undef' does not exist on component 'BlazorApp7.Components.CustomLabel' (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0115.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\BlazorApp7.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\Pages\Index.razor(16,27): error MA0118: [JSInvokable] methods must be public (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0118.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\BlazorApp7.csproj]
D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\Program.cs(11,1): error MA0004: Use Task.ConfigureAwait(false) if the current SynchronizationContext is not needed (https://github.com/meziantou/Meziantou.Analyzer/blob/main/docs/Rules/MA0004.md) [D:\src-tests\Blazor\BlazorWithRoslynAnalyzersClean\BlazorWithRoslynAnalyzersClean\BlazorApp7\BlazorApp7.csproj]
    0 Warning(s)
    8 Error(s)

λ dotnet --list-sdks
7.0.116 [C:\Program Files\dotnet\sdk]
8.0.200 [C:\Program Files\dotnet\sdk]
8.0.201 [C:\Program Files\dotnet\sdk]

λ dotnet --version
8.0.201

@meziantou
Copy link
Owner

MA0115 should be reported. In ASP.NET 8, Blazor introduced a new method AddComponentParameter which is not yet detected. A fix should appears soon :)

@lksr-demant
Copy link
Author

I have updated to newest version and MA0115 works fine.

Thank you very much for your feedback and fast fix!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants