-
Code used in the live coding demo at DotNext
- https://github.com/TessenR/NotifyPropertyChangedDemo
- A simple demo with NotifyPropertyChanged generator focused on being as simple as possible. It adds a property changed event to all types implementing INotifyPropertyChanged interface and adds properties raising this event for all fields with names ending with *BackingField suffix. It covers debugging, testing and simple generator code.
- https://github.com/TessenR/BestPracticesSourceGeneratorsDemo
- A demo focused on useful approaches to source generators' problems such as decresing their work time, producing diagnostics and configuration options.
- https://github.com/TessenR/NotifyPropertyChangedDemo
-
Source generators introduction by Microsoft
- Blog post: https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/
- Source generators cookbook: https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md
-
Online sandbox playground: https://sourcegen.dev
-
Source generator examples from Microsoft
- INotifyPropertyChanged source generator implementation from Microsoft: https://github.com/dotnet/roslyn-sdk/blob/master/samples/CSharp/SourceGenerators/SourceGeneratorSamples/AutoNotifyGenerator.cs
- Source code for all examples: https://github.com/dotnet/roslyn-sdk/tree/master/samples/CSharp/SourceGenerators
- Blogpost with explanation and how-tos - https://devblogs.microsoft.com/dotnet/new-c-source-generator-samples/
-
How to
- Pack your generator in a nuget package: https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md#package-a-generator-as-a-nuget-package
- Declare and check dependencies of code produced by a source generator: https://github.com/dotnet/roslyn/blob/master/docs/features/source-generators.cookbook.md#use-functionality-from-nuget-packages
- Use additional files from source generators
- Provide additional properties to files available to source generators
- How to declare a property for additional files: https://github.com/wieslawsoltes/SourceGenerators/blob/182b182fe2f2c1434aa98367edb30e944a9c7b3c/src/Svg.Skia.SourceGenerator/Svg.Skia.SourceGenerator.props#L4
- How to read the property in a source generator - https://github.com/wieslawsoltes/SourceGenerators/blob/182b182fe2f2c1434aa98367edb30e944a9c7b3c/src/Svg.Skia.SourceGenerator/SvgSourceGenerator.cs#L65
- How to provide the value of the property for a file - https://github.com/wieslawsoltes/SourceGenerators/blob/182b182fe2f2c1434aa98367edb30e944a9c7b3c/samples/Svg.Skia.SourceGenerator.Sample/Svg.Skia.SourceGenerator.Sample.csproj#L18
- How to utilize MSBuild properties from source generators
- My generator doesn't work with WPF. It's because of the intermediate projects used for building WPF that don't utilize generators.
- Here's an issue for WPF: dotnet/wpf#3404
- You can workaround the issue by adding
<IncludePackageReferencesDuringMarkupCompilation>true</IncludePackageReferencesDuringMarkupCompilation>
to your WPF project. This setting will be enabled by default soon.
-
Changes to partial methods in C# 9
-
IL weaving
- Fody
- Github repository with a list of add-ins: https://github.com/Fody/PropertyChanged
- PostSharp:
- Logging demo: - https://www.postsharp.net/logging
- Code for logging examples - https://github.com/postsharp/PostSharp.Samples/tree/master/Diagnostics/PostSharp.Samples.Logging.NLog
- Fody
-
Roslyn pull request replacing script-based code generation of C# syntax nodes from .xml file with source generator approach
-
Examples of existing generators
- Svg to SKPicture code: https://github.com/wieslawsoltes/SourceGenerators
- Serialization to JSON withou reflection
- Github repository: https://github.com/trampster/JsonSrcGen
- Blogpost introduction: https://trampster.blogspot.com/2020/09/jsonsrcgen-corert-pure-magic-in-my.html
- Assembly-wide constants such as product version: https://github.com/kzu/ThisAssembly
- Win32 P/Invoke methods and required types: https://github.com/microsoft/CsWin32
- Compile-time string literals to ReadOnlySpan conversion: https://github.com/ufcpp/StringLiteralGenerator
- A good list of existing source generators: https://github.com/amis92/csharp-source-generators
Source generators in action links
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment