-
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
-
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
- Declaration in .csproj: https://github.com/dotnet/roslyn/pull/47252/files#diff-5813a1e65423995c3e5401e8cf7f4fe29041c19767c9e10188e88b1cc39c3882R38
- Usage in a source generator: https://github.com/dotnet/roslyn/pull/47252/files#diff-bc078f8b0a1bfa7c287e5b0e5858682a10fb2753fc0afe582219c568a949be9bR54
- 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
Last active
August 30, 2023 21:34
-
-
Save TessenR/ab40df2d6e971a8d6e5c6c6295d85d11 to your computer and use it in GitHub Desktop.
Source generators in action links
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment