diff --git a/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.Roslyn4.0.csproj b/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.Roslyn4.0.csproj index 97c94f41..666c826d 100644 --- a/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.Roslyn4.0.csproj +++ b/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.Roslyn4.0.csproj @@ -1,6 +1,6 @@ - 4.0.1 + 4.0.1 diff --git a/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.targets b/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.targets index 9521ec03..2a13de99 100644 --- a/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.targets +++ b/Funcky.Analyzers/Funcky.Analyzers.CodeFixes/Funcky.Analyzers.CodeFixes.targets @@ -2,20 +2,23 @@ netstandard2.0 false - Funcky.Analyzers - Funcky.Analyzers.CodeFixes preview enable false 5 + + + Funcky.Analyzers.CodeFixes + Funcky.Analyzers + cs - $(AnalyzerRoslynVersion) - + diff --git a/Funcky.Analyzers/Funcky.Analyzers.Package/Funcky.Analyzers.Package.csproj b/Funcky.Analyzers/Funcky.Analyzers.Package/Funcky.Analyzers.Package.csproj index 2d49c0b5..1c3e4f91 100644 --- a/Funcky.Analyzers/Funcky.Analyzers.Package/Funcky.Analyzers.Package.csproj +++ b/Funcky.Analyzers/Funcky.Analyzers.Package/Funcky.Analyzers.Package.csproj @@ -25,6 +25,7 @@ + diff --git a/Funcky.Analyzers/Funcky.Analyzers.Package/Packing.targets b/Funcky.Analyzers/Funcky.Analyzers.Package/Packing.targets index 83035316..d06266eb 100644 --- a/Funcky.Analyzers/Funcky.Analyzers.Package/Packing.targets +++ b/Funcky.Analyzers/Funcky.Analyzers.Package/Packing.targets @@ -7,6 +7,9 @@ + + + <_analyzerPath>analyzers/dotnet <_analyzerRoslynVersion Condition="'$(AnalyzerRoslynVersion)' != ''">$([System.Version]::Parse($(AnalyzerRoslynVersion)).Major).$([System.Version]::Parse($(AnalyzerRoslynVersion)).Minor) diff --git a/Funcky.Analyzers/Funcky.Analyzers.Package/buildTransitive/Funcky.Analyzers.targets b/Funcky.Analyzers/Funcky.Analyzers.Package/buildTransitive/Funcky.Analyzers.targets new file mode 100644 index 00000000..d3ee9576 --- /dev/null +++ b/Funcky.Analyzers/Funcky.Analyzers.Package/buildTransitive/Funcky.Analyzers.targets @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.Roslyn4.0.csproj b/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.Roslyn4.0.csproj index 91df48f2..c9fb12f3 100644 --- a/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.Roslyn4.0.csproj +++ b/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.Roslyn4.0.csproj @@ -1,6 +1,6 @@ - 4.0.1 + 4.0.1 diff --git a/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.targets b/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.targets index 5234a9fa..3b66a77f 100644 --- a/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.targets +++ b/Funcky.Analyzers/Funcky.Analyzers/Funcky.Analyzers.targets @@ -5,21 +5,25 @@ false *$(MSBuildProjectFile)* - Funcky.Analyzers preview enable false 5 true + + + Funcky.Analyzers + Funcky.Analyzers + cs - $(AnalyzerRoslynVersion) - + diff --git a/Funcky.Analyzers/readme.md b/Funcky.Analyzers/readme.md index 19ff8ad1..92cd8ab1 100644 --- a/Funcky.Analyzers/readme.md +++ b/Funcky.Analyzers/readme.md @@ -22,15 +22,30 @@ This means that we ship multiple copies of the analyzer assembly in the followin ``` ╰─ analyzers ╰─ dotnet - ├─ cs - │ ├─ Funcky.Analyzers.dll - │ ╰─ ... + ├─ roslyn4.0 + │ ╰─ cs + │ ├─ Funcky.Analyzers.dll + │ ╰─ ... ╰─ roslyn4.12 ╰─ cs ├─ Funcky.Analyzers.dll ╰─ ... ``` +From the different versions, the highest compatible version is picked. + +### Remarks +* SDKs that don't support multi-targeting load analyzers recursively, + even inside the "versioned" `roslyn*` directories. + * The `System.Text.Json` package fixes this by shipping a `.targets` file with their packages that + catches this case by checking for the `SupportsRoslynComponentVersioning` property + and manually removing discovered analyzers that are incompatible. + * Our analyzers require at least Roslyn 4.0 / .NET 6.0 (which is the version that introduced multi-targeting) + so we fix this by shipping a `.targets` file that removes all our analyzers and warns the user. +* SDKs versions that support multi-targeting also load analyzers + that are not in a `roslyn*` directory, so to avoid loading analyzers twice + all analyzers need to be inside a `roslyn*` directory. + ## Roslyn Version Compatibility There are three documents that help figure out what version of Roslyn to target: * [.NET compiler platform package version reference](https://learn.microsoft.com/en-us/visualstudio/extensibility/roslyn-version-support): \