False Positive with VSTHRD103 and EF DbSet AddRange
Bug description
EFCore AddRange method on dbsets incorrectly warns when using the params ...[] array overload.
If you create the collection in advance as a list, no issue. However if you create as an array,
Repro steps
<PackageVersion Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15" />
Any db context with a dbset.
Call AddRange with an array on the dbset.
Get warned about using AddRangeAsync instead (when you are not supposed to use AddRangeAsync unless you know you added async hooks to your dbcontext).
Expected behavior
No warning, or a way to tell the analyzer whether you use async hooks or not on your db context and have it be opt-in.
Actual behavior
Warning.
- Version used:
<PackageVersion Include="Microsoft.VisualStudio.Threading.Analyzers" Version="17.14.15" />
- Application (if applicable):
Additional context
.NET 8.
<TargetFramework>net8.0</TargetFramework>
EFCore (and related) packages
<PackageVersion Include="LinqKit.Microsoft.EntityFrameworkCore" Version="8.1.8" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.13" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.13" />
I would try to fix this myself but for the love of all that is holy I can't figure out how some things are ignored but others not. I see the reference to other packages being able to include the vs-threading.ANALYZER.whatever.txt directives but I don't see any of those anywhere and I don't see how the excludeMethods gets populated by anything else. As far as I can tell efcore packages dont explicitly include the other methods that work properly in some vs-threading*.txt file anywhere in their source, and i've decompiled your nuget and their nugets and can't seem to find anything to reverse engineer indicating where those would come from, so not really sure how this works :(