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
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Cranks.Targets.GetAnalyzerPackFiles" Version="1.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Cranks.Targets.GetAnalyzerPackFiles --version 1.0.0
#r "nuget: Cranks.Targets.GetAnalyzerPackFiles, 1.0.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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 called IncludeAnalyzersInPackage 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 target
  • RoslynApiVersion The api version you can use in your analyzer. The <PackageReference> of the Microsoft.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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 203 10/9/2022