Cranks.Targets.GetAnalyzerPackFiles
1.0.0
dotnet add package Cranks.Targets.GetAnalyzerPackFiles --version 1.0.0
NuGet\Install-Package Cranks.Targets.GetAnalyzerPackFiles -Version 1.0.0
<PackageReference Include="Cranks.Targets.GetAnalyzerPackFiles" Version="1.0.0" />
paket add Cranks.Targets.GetAnalyzerPackFiles --version 1.0.0
#r "nuget: Cranks.Targets.GetAnalyzerPackFiles, 1.0.0"
// Install Cranks.Targets.GetAnalyzerPackFiles as a Cake Addin #addin nuget:?package=Cranks.Targets.GetAnalyzerPackFiles&version=1.0.0 // Install Cranks.Targets.GetAnalyzerPackFiles as a Cake Tool #tool nuget:?package=Cranks.Targets.GetAnalyzerPackFiles&version=1.0.0
This repository contains different projects which package usefule build targets to simplify certain tasks in your own projects. Right now it contains two projects simplyfying the creation and packaging process of analyzers and source generators. Theses packages never contain any source code and only enhance your existing build
Analyzer Support
Creating a good analyzer is hard enough. Delivering it to your end users is seemingly even harder. After countless hours of trial and error, I took inspiration in how Microsoft themselves ship their analyzers, by looking specifically at the repository for System.Text.Json. I have extracted the resulting targets into these projects to help other developers struggling with the same issues.
All targets in these packages are from the dotnet/runtime repository. I merely extracted and packaged these targets for simplified use.
Packages
- Cranks.Targets.GetAnalyzerPackFiles
Add this package to your analyzer projects.
The package adds a new MS Build target to your project called
GetAnalyzerPackFiles
. When this target is called it returns a list of all the files which have to be packed into the analyzer folder of your libraries nuget package. - Cranks.Targets.GetAnalyzerPackFiles
Add this package to a library project, in which you want to ship your analyzers or source generators with.
This adds a new project reference type which you can use like this:
<AnalyzerReference Include="path\to\your\analyzer\project.csproj" Pack="true" ReferenceAnalyzer="false" />
It also includes new target calledIncludeAnalyzersInPackage
which gets called right before your project is packed. It then uses GetAnalyzerPackFiles in of all your<AnalyzerReference>
projects and includes the relevant files into the analyzer directory of your nuget package.
MS Build Variables
The added targets make use of certain variables. This are not required to set, but should be used anyway:
AnalyzerLanguage
defines the language of your analyzer, and hence in which folder it gets added in the nuget package, e.g.cs
. Keep empty if your analyzer is language agnostic.AnalyzerRoslynVersion
The Roslyn version the package targets. This defines the apis you can use in your project and depends on the minimum visual studio version you want to targetRoslynApiVersion
The api version you can use in your analyzer. The<PackageReference>
of theMicrosoft.CodeAnalysis.CSharp.Workspaces
(or other languages you might want to be using) package should map to the value you enter here.
The AnalyzerRoslynVersion
and RoslynApiVersion
values depend on which version of visual studio you want to target and should always target the same version
To find which versions of VS correspond to which Roslyn version, take a look .NET compiler platform package version reference.
Major.Minor.Patch defines the RoslynApiVersion
, whereas Major.Minor
restricts the AnalyzerRoslynVersion you want to target.
As an example, when you want to create a source generator for C#, targeting at least Visual Studio 2022 RTM (17.0), add this to your project files:
<PropertyGroup>
<AnalyzerLanguage>cs</AnalyzerLanguage>
<AnalyzerRoslynVersion>4.0</AnalyzerRoslynVersion>
<RoslynApiVersion>4.0.1</RoslynApiVersion>
</PropertyGroup>
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp1.0 was computed. netcoreapp1.1 was computed. netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard1.0 is compatible. netstandard1.1 was computed. netstandard1.2 was computed. netstandard1.3 was computed. netstandard1.4 was computed. netstandard1.5 was computed. netstandard1.6 was computed. netstandard2.0 was computed. netstandard2.1 was computed. |
.NET Framework | net45 was computed. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen30 was computed. tizen40 was computed. tizen60 was computed. |
Universal Windows Platform | uap was computed. uap10.0 was computed. |
Windows Phone | wp8 was computed. wp81 was computed. wpa81 was computed. |
Windows Store | netcore was computed. netcore45 was computed. netcore451 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 1.0
- NETStandard.Library (>= 1.6.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 242 | 10/9/2022 |